Qt開發經驗小技巧11 20

2021-10-01 13:06:13 字數 1778 閱讀 9063

獲取類的屬性

const qmetaobject *metaobject = object->metaobject();

int count = metaobject->propertycount();

for (int i = 0; i < count; ++i)

qt內建圖示封裝在qstyle中,大概七十多個圖示,可以直接拿來用。

qstyle::sp_titlebarmenubutton

根據作業系統位數判斷載入

win32 /../../bin64

} else /../../bin32 }

}

qt5增強了很多安全性驗證,如果出現setgeometry: unable to set geometry,請將該控制項的可見移到加入布局之後。

可以將控制項a新增到布局,然後控制項b設定該布局,這種靈活性大大提高了控制項的組合度,比如可以在文字框左側右側增加乙個搜尋按鈕,按鈕設定圖示即可。

qpushbutton *btn = new qpushbutton;

btn->resize(30, ui->lineedit->height());

qhboxlayout *layout = new qhboxlayout(ui->lineedit);

layout->setmargin(0);

layout->addstretch();

layout->addwidget(btn);

對qlcdnumber控制項設定樣式,需要將qlcdnumber的segmentstyle設定為flat。

巧妙的使用findchildren可以查詢該控制項下的所有子控制項。findchild為查詢單個。

//查詢指定類名objectname的控制項

qlistwidgets = parentwidget.findchildren("widgetname");

//查詢所有qpushbutton

qlistallpbuttons = parentwidget.findchildren();

//查詢一級子控制項,不然會一直遍歷所有子控制項

qlistchildbuttons = parentwidget.findchildren(qstring(), qt::finddirectchildrenonly);

巧妙的使用inherits判斷是否屬於某種類。

qtimer *timer = new qtimer;         // qtimer inherits qobject

timer->inherits("qtimer"); // returns true

timer->inherits("qobject"); // returns true

timer->inherits("qabstractbutton"); // returns false

使用弱屬性機制,可以儲存臨時的值用於傳遞判斷。可以通過widget->dynamicpropertynames()列出所有弱屬性名稱,然後通過widget->property(「name」)取出對應的弱屬性的值。

在開發時, 無論是出於維護的便捷性, 還是節省記憶體資源的考慮, 都應該有乙個 qss 檔案來存放所有的樣式表, 而不應該將 setstylesheet 寫的到處都是。如果是初學階段或者測試階段可以直接ui上右鍵設定樣式表,正式專案還是建議統一到乙個qss樣式表檔案比較好,統一管理。

qt開發經驗開源主頁(持續更新):

Qt開發經驗小技巧1 10

當編譯發現大量錯誤的時候,從第乙個看起,乙個乙個的解決,不要急著去看下乙個錯誤,往往後面的錯誤都是由於前面的錯誤引起的,第乙個解決後很可能都解決了。定時器是個好東西,學會好使用它,有時候用qtimer singleshot可以解決意想不到的問題。開啟creator,在構建套件的環境中增加makefl...

Qt開發經驗小技巧31 40

判斷msvc編譯器版本。if msc ver 1800 msvc 14.0 msc ver 1900 visual studio 2015 msvc 12.0 msc ver 1800 visual studio 2013 msvc 11.0 msc ver 1700 visual studio 2...

Qt開發經驗小技巧41 50

如果使用sqlite資料庫不想產生資料庫檔案,可以建立記憶體資料庫。qsqldatabase db qsqldatabase adddatabase qsqlite db.setdatabasename memory 清空資料表並重置自增id,sql truncate table table nam...