QT攻略——我在QT中遇到的那些坑


 

 

(1)QUdpSocket接收數據

進入槽后,要用這種方式讀取,否則可能會導致不發readyRead()信號 。
while(udpSocket->bytesAvailable())
{
udpSocket->readDatagram(ch,size);
}

(2)QTcpSocket刪除

一定要用deleteLater
一定要用deleteLater
一定要用deleteLater
否則會導致用戶對象溢出

(3)運行文件附帶調試輸出窗口

CONFIG += console pro
配合->http://github.com/851896022/QLog

(4)可以在pro文件中寫上標記版本號+ico圖標

VERSION = 2019.08.08
RC_ICONS = main.ico

(5)解決socket傳輸后等中文亂碼

轉成base64傳輸
QByteArray(QString.toStdString().data()).toBase64()

(6)QT連接MySql后,長時間無操作(默認8小時)會斷開。

isOpen()等函數無法判斷,需執行sql語句才能發現失敗
QSqlDatabase.setConnectOptions("MYSQL_OPT_RECONNECT=1");
↑斷開后可自動重連

(7)在槽使用sender()函數可獲取到發出信號的對象的指針。

(8)子線程中使用QAxWidget不成功,原因是在QApplication的主線程中,會自動初始化COM庫,而新開辟的子線程不會自動初始化COM庫,所以需要我們手動來初始化。

//添加頭文件
#include <windows.h>
//在線程開始的時候初始化COM庫:
HRESULT r = OleInitialize(0);
if (r != S_OK && r != S_FALSE)
{
qWarning("Qt:初始化Ole失敗(error %x)",(unsigned int)r);
}
使用結束后需要釋放掉:
OleUninitialize();

(9)file.write()以后調用file.flush()避免數據在緩存中未成功寫入。

(10)延時。

{
QEventLoop loop;
QTimer t;
connect(&t,SIGNAL(timeout()),&loop,SLOT(quit()));
t.start(1000);
loop.exec();
}

(11)別用QWidget布局,別問我怎么知道的。

(12) 對QLCDNumber控件設置樣式,需要將QLCDNumber的segmentstyle設置為flat。

(13)QTimer::singleShot 計時器單次觸發,有時會有意想不到的效果

(14)QByteArray 有toHex 有fromHex 有toBase64有fromBase64


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM