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