Qt開發經驗小技巧156-160
阿新 • • 發佈:2021-06-17
- Qt的UI介面在resize以後有個BUG,懸停樣式沒有取消掉,需要主動模擬滑鼠動一下。
void frmMain::on_btnMenu_Max_clicked()
{
......
//最大化以後有個BUG,懸停樣式沒有取消掉,需要主動模擬滑鼠動一下
QEvent event(QEvent::Leave);
QApplication::sendEvent(ui->btnMenu_Max, &event);
}
- 專案中啟用c++11語法支援。
greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11 lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11
- Qt的文字控制元件比如QTextEdit預設載入大文字比如10MB的文字,很容易卡死甚至崩潰,那是因為預設一個屬性開啟了,需要遮蔽掉就好很多。
ui->textEdit->setUndoRedoEnabled(false)
- 其他幾點常規小經驗,本人在這幾個地方摔跤過很多次。
- 有返回值的函式,一定要主動return返回值,有部分編譯器在沒有返回值的情況下也能正常編譯通過,但是執行的時候會出問題,得不到想要的結果,因為沒有return對應的值。
- 定義的區域性變數,主動給定個初始值,是個必須養成的好習慣,不然編譯器給的初始值很可能不是你想要的,比如int變數預設0,有時候隨機變成一個很大的數值,bool變數的初始值不同編譯器不同值,有些是true有些是false,主動給一個初始值更可靠。
- 某些函式引數很多,而且後期可能還會修改和增加,這就導致了源頭修改以後,關聯訊號槽的地方也要修改,引數型別和位置必須保持完全一致,對應槽函式處理也要修改等,改動的工作量非常大而且極不友好,所以對於非固定引數的函式,建議用結構體,這樣非常容易增加其他的引數,而且不用修改訊號槽關聯和訊號槽函式定義等,比如學生資訊表、商品資訊表作為引數傳輸,最佳方案就是結構體。
- QTabWidget選項卡控制元件,生成的tabbar選項卡寬度是按照文字自動設定的,文字越長選項卡的寬度越大,很多時候,我們需要的是一樣的寬度或者等分填充,
//方法1:字串空格填充 ui->tabWidget->addTab(httpClient1, "測 試"); ui->tabWidget->addTab(httpClient1, "人員管理"); ui->tabWidget->addTab(httpClient1, "系統設定"); //方法2:識別尺寸改變事件自動設定最小寬度 void MainWindow::resizeEvent(QResizeEvent *e) { int count = ui->tabWidget->tabBar()->count(); int width = this->width() - 30; QString qss = QString("QTabBar::tab{min-width:%1px;}").arg(width / count); this->setStyleSheet(qss); } //方法3:設定全域性樣式,不同選項卡個數的設定不同的寬度 QStringList list; list << QString("QTabWidget[tabCount=\"2\"]>QTabBar::tab{min-width:%1px;}").arg(100); list << QString("QTabWidget[tabCount=\"3\"]>QTabBar::tab{min-width:%1px;}").arg(70); qApp->setStyleSheet(list.join("")); //設定了tabCount弱屬性自動去找對應的寬度設定 ui->tabWidget->setProperty("tabCount", 2); ui->tabWidget->setProperty("tabCount", 3); //方法4:強烈推薦-》使用內建的方法 setExpanding setDocumentMode 兩個屬性都必須設定 ui->tabWidget->tabBar()->setDocumentMode(true); ui->tabWidget->tabBar()->setExpanding(true); //樣式表一步到位不用每個都單獨設定 QString("QTabBar{qproperty-usesScrollButtons:false;qproperty-documentMode:true;qproperty-expanding:true;}"); //在5.9以前開啟這個設定後,貌似選項卡個數按照真實個數+1計算寬度,也就是永遠會留空一個tab的佔位。 //5.9以後貌似修復了這個BUG,按照理想中的拉伸填充等分設定tab的寬度。
Qt開發經驗開源主頁(持續更新):