借助qt提供的qtuitools模組以及其中的quiloader類我們可以實現在執行時獲取並
載入.ui檔案。我們可以使用任何qiodevice的例項來讀取使用者介面架構,通常使用qfile
類的例項。quiloader::load()方法讀取了.ui檔案中包含的介面架構並將它賦予乙個
qwidget子類化的例項。
本節介紹的例項名為calculatorbuilder,仍然實現簡單的加法計算功能,只不過是採
用動態載入.ui檔案的方法完成的。
要實現動態載入ui,首先需在程式中包含qtuitools模組的標頭檔案:
#include
然後新建乙個.qrc檔案,描述.ui檔案的路徑:
calculatorform.ui
將彈出子視窗的.ui檔案放在工程目錄下。
接下來,在程式的.pro檔案中手動加入以下兩行**:
config+=uitools
resources+=calculatorbuilder.qrc
我們對下面的重點**進行講解。
quiloaderloader;
qfilefile(":/forms/calculatorform.ui");
file.open(qfile::readonly);
qwidget*formwidget= loader.load(&file,this);
file.close();
下面的例子演示了訊號與槽自動關聯的具體實現過程。我們只需按照下面的標準格式定
義槽函式,這之後,uic將會根據qmetaobject類制定的規則,生成介面實體類的setupui()
函式的內容,並完成訊號與槽的關聯,這一過程是隱藏在背後實現的,我們也無需過多關心。
voidon__();
我們通過定義私有槽函式on_okbutton_clicked()即實現了ok按鈕的clicked()訊號和
槽的連線。
問:動態載入方式與編譯時載入.ui檔案的方式,在原理上有什麼不同?
答:從原理上來講,動態載入方式並不需要通過uic把.ui檔案轉換成c++**,它是
程式執行時的時候使用quiloader類載入該檔案的,而編譯時載入.ui檔案的方法,是需要
借助uic把.ui檔案中的內容轉化為c++**的,並生成ui_***.h檔案。就像下面這種方式:
問:使用動態載入方式時,我如何訪問窗體中的各個子視窗部件呢?
答:可以通過呼叫全域性函式qfindchild()來訪問這個窗體中的各個子視窗部件,舉
例如下:
ui_findbutton= qfindchild(this,"findbutton");
ui_textedit= qfindchild(this,"textedit");
ui_lineedit= qfindchild(this,"lineedit");
QT 動態載入UI檔案注意事項
qt 動態載入ui檔案注意事項是本文將要介紹的內容,內容不多,但很細膩,先來看內容。在最新的qt 4版本中 qt4.1以上 加入了動態載入ui檔案的功能。使用如下 quiloader loader qfile file calculator.ui file.open qfile readonly q...
設計時載入UI
1.首選建立三個ui窗體,分別為first.ui ui first.h second.ui ui second.h third.ui ui third.h 2.再建立乙個包含三個ui的標頭檔案,並新建乙個mywidget類呼叫這三個窗體,並寫入訊號槽實現 標頭檔案mywidget.h ifndef ...
UI 不能載入的原因
做專案時遇到了乙個 ui不能載入的問題 有時候能載入 有時候不能載入 後來 經過各種找 找到了 問題的所在 原來 是因為 在載入是 用了 new thread connectnet start 然後在載入fragment 時候不初始化 ui 就會顯示背景 因為使用 new thread connec...