您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Qt開(kāi)發(fā)小技巧有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
Qt中的QColor對(duì)顏色封裝的很完美,支持各種轉(zhuǎn)換,比如rgb、hsb、cmy、hsl,對(duì)應(yīng)的是toRgb、toHsv、toCmyk、toHsl,還支持透明度設(shè)置,顏色值還能轉(zhuǎn)成16進(jìn)制格式顯示。
QColor color(255, 0, 0, 100); qDebug() << color.name() << color.name(QColor::HexArgb); //輸出 #ff0000 #64ff0000
QVariant類型異常的強(qiáng)大,可以說(shuō)是萬(wàn)能的類型,在進(jìn)行配置文件的存儲(chǔ)的時(shí)候,經(jīng)常會(huì)用到QVariant的轉(zhuǎn)換,QVariant默認(rèn)自帶了toString、toFloat等各種轉(zhuǎn)換,但是還是不夠,比如有時(shí)候需要從QVariant轉(zhuǎn)到QColor,而卻沒(méi)有提供toColor的函數(shù),這個(gè)時(shí)候就要用到萬(wàn)能辦法。
if (variant.typeName() == "QColor") { QColor color = variant.value<QColor>(); QFont font = variant.value<QFont>(); QString nodeValue = color.name(QColor::HexArgb); }
Qt中的QString和const char *之間轉(zhuǎn)換,最好用toStdString().c_str()而不是toLocal8Bit().constData(),比如在setProperty中如果用后者,字符串中文就會(huì)不正確,英文正常。
Qt的信號(hào)槽機(jī)制非常牛逼,也是Qt的獨(dú)特的核心功能之一,有時(shí)候我們?cè)诤芏啻绑w中傳遞信號(hào)來(lái)實(shí)現(xiàn)更新或者處理,如果窗體層級(jí)比較多,比如窗體A的父類是窗體B,窗體B的父類是窗體C,窗體C有個(gè)子窗體D,如果窗體A一個(gè)信號(hào)要傳遞給窗體D,問(wèn)題來(lái)了,必須先經(jīng)過(guò)窗體B中轉(zhuǎn)到窗體C再到窗體D才行,這樣的話各種信號(hào)關(guān)聯(lián)信號(hào)的connect會(huì)非常多而且管理起來(lái)比較亂,可以考慮增加一個(gè)全局的單例類AppEvent,公共的信號(hào)放這里,然后窗體A對(duì)應(yīng)信號(hào)綁定到AppEvent,窗體D綁定AppEvent的信號(hào)到對(duì)應(yīng)的槽函數(shù)即可,干凈清爽整潔。
QTextEdit右鍵菜單默認(rèn)英文的,如果想要中文顯示,加載widgets.qm文件即可,一個(gè)Qt程序中可以安裝多個(gè)翻譯文件,不沖突。
Qt中有個(gè)全局的焦點(diǎn)切換信號(hào)focusChanged,可以用它做自定義的輸入法。Qt4中默認(rèn)會(huì)安裝輸入法上下文,比如在main函數(shù)打印a.inputContext會(huì)顯示值,這個(gè)默認(rèn)安裝的輸入法上下文,會(huì)攔截兩個(gè)牛逼的信號(hào)QEvent::RequestSoftwareInputPanel和QEvent::CloseSoftwareInputPanel,以至于就算你安裝了全局的事件過(guò)濾器依然識(shí)別不到這兩個(gè)信號(hào),你只需要在main函數(shù)執(zhí)行a.setInputContext(0)即可,意思是安裝輸入法上下文為空。
在Qt5.10以后,表格控件QTableWidget或者QTableView的默認(rèn)最小列寬改成了15,以前的版本是0,所以在新版的qt中,如果設(shè)置表格的列寬過(guò)小,不會(huì)應(yīng)用,取的是最小的列寬。所以如果要設(shè)置更小的列寬需要重新設(shè)置ui->tableView->horizontalHeader()->setMinimumSectionSize(0);
Qt源碼中內(nèi)置了一些未公開(kāi)的不能直接使用的黑科技,都藏在對(duì)應(yīng)模塊的private中,比如gui-private widgets-private等,比如zip文件解壓類QZipReader、壓縮類QZipWriter就在gui-private模塊中,需要在pro中引入QT += gui-private才能使用。
#include "QtGui/private/qzipreader_p.h" #include "QtGui/private/qzipwriter_p.h" QZipReader reader(dirPath); QString path(""); //解壓文件夾到當(dāng)前目錄 reader.extractAll(path); //文件夾名稱 QZipReader::FileInfo fileInfo = reader.entryInfoAt(0); //解壓文件 QFile file(filePath); file.open(QIODevice::WriteOnly); file.write(reader.fileData(QString::fromLocal8Bit("%1").arg(filePath))); file.close(); reader.close(); QZipWriter *writer = new QZipWriter(dirPath); //添加文件夾 writer->addDirectory(unCompress); //添加文件 QFile file(filePath); file.open(QIODevice::ReadOnly); writer->addFile(data, file.readAll()); file.close(); writer->close();
理論上串口和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)都是默認(rèn)異步的,操作系統(tǒng)自動(dòng)調(diào)度,完全不會(huì)卡住界面,網(wǎng)上那些說(shuō)收發(fā)數(shù)據(jù)卡住界面主線程的都是扯幾把蛋,真正的耗時(shí)是在運(yùn)算以及運(yùn)算后的處理,而不是收發(fā)數(shù)據(jù),在一些小數(shù)據(jù)量運(yùn)算處理的項(xiàng)目中,一般不建議動(dòng)用線程去處理,線程需要調(diào)度開(kāi)銷的,不要什么東西都往線程里邊扔,線程不是萬(wàn)能的。只有當(dāng)真正需要將一些很耗時(shí)的操作比如編碼解碼等,才需要移到線程處理。
在構(gòu)造函數(shù)中獲取控件的寬高很可能是不正確的,需要在控件首次顯示以后再獲取才是正確的,控件是在首次顯示以后才會(huì)設(shè)置好正確的寬高值,記住是在首次顯示以后,而不是構(gòu)造函數(shù)或者程序啟動(dòng)好以后,如果程序啟動(dòng)好以后有些容器控件比如QTabWidget中的沒(méi)有顯示的頁(yè)面的控件,你去獲取寬高很可能也是不正確的,萬(wàn)無(wú)一失的辦法就是首次顯示以后去獲取。
“Qt開(kāi)發(fā)小技巧有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。