溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt開發(fā)技巧實例分析

發(fā)布時間:2021-12-15 13:50:05 來源:億速云 閱讀:131 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“Qt開發(fā)技巧實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Qt開發(fā)技巧實例分析”吧!

  1. 在某些http post數(shù)據(jù)的時候,如果采用的是&字符串連接的數(shù)據(jù)發(fā)送,中文解析亂碼的話,需要將中文進行URL轉(zhuǎn)碼。

QString content = "測試中文";
QString note = content.toUtf8().toPercentEncoding();
  1. Qt默認不支持大資源文件,比如添加了字體文件,需要pro文件開啟。 CONFIG += resources_big

  2. Qt中繼承QWidget之后,樣式表不起作用,解決辦法有三個。強烈推薦方法一。 方法一:設(shè)置屬性 this->setAttribute(Qt::WA_StyledBackground, true); 方法二:改成繼承QFrame,因為QFrame自帶paintEvent函數(shù)已做了實現(xiàn),在使用樣式表時會進行解析和繪制。 方法三:重新實現(xiàn)QWidget的paintEvent函數(shù)時,使用QStylePainter繪制。

void myclass::paintEvent(QPaintEvent *)
{
    QStyleOption o;
    o.initFrom(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &o, &p, this);
}
  1. 有時候在界面上加了彈簧,需要動態(tài)改變彈簧對應的拉伸策略,對應方法為changeSize,很多人會選擇使用set開頭去找,找不到的。

  2. 在使用QFile的過程中,不建議頻繁的打開文件寫入然后再關(guān)閉文件,比如間隔5ms輸出日志,IO性能瓶頸很大,這種情況建議先打開文件不要關(guān)閉,等待合適的時機比如析構(gòu)函數(shù)中或者日期變了需要重新變換日志文件的時候關(guān)閉文件。不然短時間內(nèi)大量的打開關(guān)閉文件會很卡,文件越大越卡。

  3. 在很多網(wǎng)絡(luò)應用程序,需要自定義心跳包來保持連接,不然斷電或者非法關(guān)閉程序,對方識別不到,需要進行超時檢測,但是有些程序沒有提供心跳協(xié)議,此時需要啟用系統(tǒng)層的?;畛绦?,此方法適用于TCP連接。

int fd = tcpSocket->socketDescriptor();
int keepAlive = 1;      //開啟keepalive屬性,缺省值:0(關(guān)閉)
int keepIdle = 5;       //如果在5秒內(nèi)沒有任何數(shù)據(jù)交互,則進行探測,缺省值:7200(s)
int keepInterval = 2;   //探測時發(fā)探測包的時間間隔為2秒,缺省值:75(s)
int keepCount = 2;      //探測重試的次數(shù),全部超時則認定連接失效,缺省值:9(次)
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));
setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(fd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
  1. 如果程序打包好以后彈出提示 This application failed to start because it could not find or load the Qt platform plugin 一般都是因為platforms插件目錄未打包或者打包錯了的原因?qū)е碌摹?/p>

  2. 非常不建議tr中包含中文,盡管現(xiàn)在的新版Qt支持中文到其他語言的翻譯,但是很不規(guī)范,也不知道TMD是誰教的,tr的本意是包含英文,然后翻譯到其他語言比如中文,現(xiàn)在大量的初學者濫用tr,如果沒有翻譯的需求,禁用tr,tr需要開銷的,Qt默認會認為他需要翻譯,會額外進行特殊處理。

  3. 很多人Qt和Qt Creator傻傻分不清楚,經(jīng)常問Qt什么版本結(jié)果發(fā)一個Qt Creator的版本過來,Qt Creator是使用Qt編寫的集成開發(fā)環(huán)境IDE,和宇宙第一的Visual Studio一樣,他可以是msvc編譯器的(WIN對應的Qt集成安裝環(huán)境中自帶的Qt Cerator是msvc的),也可以是mingw編譯的,還可以是gcc的。如果是自定義控件插件,需要集成到Qt Creator中,必須保證該插件的動態(tài)庫文件(dll或者so等文件)對應的編譯器和Qt版本以及位數(shù)和Qt Creator的版本完全一致才行,否則基本不大可能集成進去。特別注意的是Qt集成環(huán)境安裝包中的Qt版本和Qt Creator版本未必完全一致,必須擦亮眼睛看清楚,有些是完全一致的。

  4. 超過兩處相同處理的代碼,建議單獨寫成函數(shù)。代碼盡量規(guī)范精簡,比如 if(a == 123) 要寫成 if (123 == a),值在前面,再比如 if (ok == true) 要寫成 if (ok),if (ok == false) 要寫成 if (!ok)等。

到此,相信大家對“Qt開發(fā)技巧實例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI