一些自定义函数
1、每兩個字符加一個空格
QString MainWindow::AddSpaceToStr(QString source_str)
{
QString result_str = "";//返回帶有空格的字符串
int source_str_length = source_str.length();
for(int i=0;i<source_str_length;i++)
{
result_str += source_str.mid(i,2);
result_str += " ";
i++;
}
return result_str;
}
2、將QString轉化到QByteArray里面//此方法不適用,其實有更好的方法
QByteArray MainWindow::StrToHex(QString packet_str,QByteArray dataArray) { int dataCount = 0;//字節數組地址 int packetLength = packet_str.length();//發送內容的字符數 int dataLength = 0;//字節數組的長度 dataLength = packetLength/2;//字符數除以2 if(packetLength%2 != 0)//如果為奇數 dataLength++; dataArray.resize(dataLength);//設置字節數組的長度 QString tempStr = ""; for(int i=0;i<packetLength;i++)//通過此循環將發送內容每兩個字符轉化為一個字節十六進制,存在字節數組里面 { bool ok; tempStr = packet_str.mid(i,2); dataArray[dataCount++] = (uchar)tempStr.toInt(&ok,16); i++; }return dataArray; }
QString dataStr = ui->textEdit->toPlainText();
?
dataStr = dataStr.replace(" ","");
?
QByteArray ba = QByteArray::fromHex(dataStr.toLatin1());
3、QString轉const char
#include <iostream>//需要使用std
QString tempFileName;
? ?std::string str = tempFileName.toStdString();//標準庫的string
?
const char* ch = str.c_str();//ch就是const char
4、獲取時間格式:年-月-日-時-分-秒?QTime currentTime = QTime::currentTime();
QString timeStr = "--->" + QString::number(currentDate.year()) + "-";//年
timeStr += QString::number(currentDate.month()) + "-";//月
timeStr += QString::number(currentDate.day()) + "-";//日
timeStr += QString::number(currentTime.hour()) + "-";//時
timeStr += QString::number(currentTime.minute()) + "-";//分
timeStr += QString::number(currentTime.second());//秒
?
QDateTime current_date_time = QDateTime::currentDateTime(); QString current_date = current_date_time.toString("yyyy-MM-dd"); QString current_time = current_date_time.toString("hh:mm:ss.zzz "); 5、字符數組轉十六進制字符串char{0x00,0x01}->QString(00 01) QString MyMethod::uchar2Str(uchar *sourceChar, int length) { QByteArray ba;ba.resize(length); memcpy(ba.data(),sourceChar,length); QString resultStr = ba.toHex(); resultStr = MyMethod::formatStr(resultStr); return resultStr; } 6、打印CAN錯誤碼 void MainWindow::printCanErrCode() { QString tempStr;VCI_ERR_INFO err_info; VCI_ReadErrInfo(this->DevType,this->DevIndex,this->CanIndex,&err_info); tempStr = QString::number(err_info.ErrCode); QMessageBox::warning(this,"打開設備","操作失敗\n錯誤代碼:"+tempStr); }? 7、設置本地的QSS文件 QString MainWindow::getQssContent() { QFile styleSheet("F:\\QtSpace\\MyCanTest\\test.txt"); if (!styleSheet.open(QIODevice::ReadOnly)) { qDebug()<<"Can't open the style sheet file."; return ""; } return styleSheet.readAll();} 8、根據5個串口配置combobox,獲取串口配置結構體1)、串口配置結構體定義 typedef struct { QString portName;//串口號 QSerialPort::BaudRate baudRate;//波特率 QSerialPort::DataBits dataBits;//數據位 QSerialPort::Parity parity;//校驗位 QSerialPort::StopBits stopBites;//停止位 }SerialportInfo;2)、根據5個combobox返回此結構體 SerialportInfo MainWindow::getSerialportInfo(QComboBox* cb1,QComboBox* cb2,QComboBox* cb3,QComboBox* cb4,QComboBox* cb5) { SerialportInfo serialPortInfo; /*串口名字*/ serialPortInfo.portName = cb1->currentText();//串口名字 /*波特率*/ if("1200"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud1200; } else if("2400"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud2400; } else if("4800"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud4800; } else if("9600"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud9600; } else if("19200"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud19200; } else if("38400"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud38400; } else if("57600"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud57600; } else if("115200"==cb2->currentText()) { serialPortInfo.baudRate = QSerialPort::Baud115200; } /*數據位*/ if(0==cb3->currentIndex()) { serialPortInfo.dataBits = QSerialPort::Data8; } else if(1==cb3->currentIndex()) { serialPortInfo.dataBits = QSerialPort::Data7; } else if(2==cb3->currentIndex()) { serialPortInfo.dataBits = QSerialPort::Data6; } else if(3==cb3->currentIndex()) { serialPortInfo.dataBits = QSerialPort::Data5; } /*校驗位*/ if("NONE"==cb4->currentText()) { serialPortInfo.parity = QSerialPort::NoParity; } else if("ODD"==cb4->currentText()) { serialPortInfo.parity = QSerialPort::OddParity; } else if("EVEN"==cb4->currentText()) { serialPortInfo.parity = QSerialPort::EvenParity; } else if("MARK"==cb4->currentText()) { serialPortInfo.parity = QSerialPort::MarkParity; } else if("SPACE"==cb4->currentText()) { serialPortInfo.parity = QSerialPort::SpaceParity; } /*停止位*/ if(0==cb5->currentIndex()) { serialPortInfo.stopBites = QSerialPort::OneStop; } else if(1==cb5->currentIndex()) { serialPortInfo.stopBites = QSerialPort::OneAndHalfStop; } else if(2==cb5->currentIndex()) { serialPortInfo.stopBites = QSerialPort::TwoStop; } return serialPortInfo; }
9、QString("FF")轉BYTE(FF) BYTE MyMethod::hexToByte(QString info) { return (BYTE)info.toUInt(NULL,16); }
10、根據年月日得到是否為工作日 int CaculateWeekDay(int y, int m, int d) {if(m==1||m==2) //把一月和二月換算成上一年的十三月和是四月 {m+=12;y--;}int Week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;switch(Week){case 0:return WORKDAY;/*cout << "是星期一" << endl;*/ break;case 1:return WORKDAY;/*cout << "是星期二" << endl;*/ break;case 2:return WORKDAY;/*cout << "是星期三" << endl;*/ break;case 3:return WORKDAY;/*cout << "是星期四" << endl;*/ break;case 4:return WORKDAY;/*cout << "是星期五" << endl;*/ break;case 5:return NOTWORKDAY;/*cout << "是星期六" << endl;*/ break;case 6:return NOTWORKDAY;/*cout << "是星期日" << endl;*/ break;default:return ERRORDAY;}return ERRORDAY; }
?11、從數據流中找出數據包
static QByteArray allBa;//用來存所有文件allBa.append(tcpClient->readAll());//讀取數據int head = allBa.indexOf(HEAD);//報文頭的位置uint16_t length = 0;//存長度字節 QByteArray currentBa;int id = 0;while (-1 != head){allBa = allBa.mid(head);//去掉報頭之前的memcpy(&length, allBa.data() + 2, 2);if (allBa.size() >= length)//長度夠,進行解析 {currentBa = allBa.mid(0, length);//獲取當前完成包id = Mymethod::getPacketType(currentBa);if (-1 != id){emit getPacketSignal(id, currentBa);qDebug() << "接收指令:" << currentBa.toHex().toUpper();}allBa = allBa.mid(length); } else { break; } head = allBa.indexOf(HEAD);//刷新報文頭的位置 }
?
轉載于:https://www.cnblogs.com/judes/p/6671232.html
總結
- 上一篇: 支付宝支付系统繁忙,请稍后再试(ALI6
- 下一篇: bzoj1562 [NOI2009]变换