Qt 5.4 中新建「Designer Form」對話框,僅生成 .ui 文件,缺少 .h 和 .cpp。視頻教程(Qt 4.7)中新建同名項目會生成三個文件。
Qt 4 與 Qt 5 的項目模板機制不同:
.ui XML 文件,純 UI 定義,無 C++ 代碼。需手動編寫類繼承 QWidget/QDialog 並在構造函數中 ui.setupUi(this)。.h、.cpp、.ui 三文件,包含繼承自 QWidget/QDialog 的類定義與實現,自動調用 setupUi。QDialog(對話框)、QWidget(窗口)、QMainWindow(主窗口)MyDialog),勾選生成 .h/.cpp/.ui// MyDialog.h
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
#include "ui_MyDialog.h" // ui 編譯生成的頭文件
class MyDialog : public QDialog {
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = nullptr);
~MyDialog();
private:
Ui::MyDialog *ui; // 或 Ui::MyDialog ui; (值語義)
};
#endif
// MyDialog.cpp
#include "MyDialog.h"
MyDialog::MyDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MyDialog) {
ui->setupUi(this);
}
MyDialog::~MyDialog() {
delete ui; // 若用指針
}
.ui 為 XML 格式,構建時由 uic (User Interface Compiler) 編譯生成 ui_XXX.h,包含 Ui::ClassName 類,內含 setupUi(QWidget*) 方法。CMake/qmake 自動處理此過程,無需手動調用 uic。
QtGui 模塊拆分:Widgets 類移至 QtWidgets,需 QT += widgets。connect(sender, &Sender::signal, receiver, &Receiver::slot)。Qt Creator 中「Designer Form」僅生成 UI 定義文件,「Designer Form Class」才生成完整的 C++ 類文件。選擇正確模板是關鍵。若已創建 .ui,可手動編寫類關聯 ui_XXX.h。理解 uic 編譯流程與 Qt 4/5 模板差異,能避免此類困惑。