uic讀取由QtDesigner生成的XML格式的用戶界面定義文件(.ui文件),而後生成其對應的C++頭文件。html
若界面文件爲ZZZ.ui,則對應生成的頭文件爲ui_ZZZ.h。默認狀況下:web
①基於QMainWindow的程序,會生成一個叫ui_mainwindow.h的頭文件函數
②基於QDialog的程序,會生成一個叫ui_dialog.h的頭文件ui
③基於QWidget的程序,會生成一個叫ui_widget.h的頭文件this
由Qt Creator自動完成的工做有以下:spa
(1)在生成的頭文件中,首先會定義一個叫Ui_XXX的類,其中XXX是主窗口的objectName。指針
好比我將主窗口的objectName設爲masikkk,則頭文件中會定義類Ui_masikkkorm
此類中有全部控件的聲明,以及setupUi(QMainWindow */QDialog */QWidget *)函數的定義。htm
在setupUi()函數中,會定義控件的全部屬性和行爲。對象
最後,會定義一個名爲Ui的命名空間,裏面聲明一個類masikkk,此類繼承自Ui_masikkk :
namespace Ui {
class masikkk : public Ui_masikkk{};
}
(2)在主窗口的頭文件中,會聲明命名空間Ui :
namespaceUi{
classmasikkk;
}
而且在類的定義中聲明一個私有的Ui::masikkk類的指針 * ui:
Ui::masikkk * ui;
在構造函數實現時,會在參數列表中新生成一個Ui::masikkk類的對象賦給指針ui:
ui(new Ui::masikkk)
並在函數體內調用setupUi()函數,用主窗口的指針(this指針)做參數:
ui -> setupUi(this);
這樣就實現了爲程序加載界面。
注意:若是你在Qt Designer中更改了主窗口的objectName,則ui文件生成的頭文件中也會相應自動修改,
但在主窗口的頭文件和實現文件中,不會自動將類名修改成新的objectName,須要手動修改的地方有三個,
在上文中我已分別用下劃線標出了,只需將這三個地方修改成主窗口的新的objectName就好了