日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一些自定义函数

發布時間:2025/3/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一些自定义函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

總結

以上是生活随笔為你收集整理的一些自定义函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。