首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Qt Designer Form 與 Designer Form Class 文件生成差異解析

     編輯:程式設計疑難解答

問題現象

Qt 5.4 中新建「Designer Form」對話框,僅生成 .ui 文件,缺少 .h 和 .cpp。視頻教程(Qt 4.7)中新建同名項目會生成三個文件。

根本原因

Qt 4 與 Qt 5 的項目模板機制不同:

  • Designer Form(界面設計師表單):僅生成 .ui XML 文件,純 UI 定義,無 C++ 代碼。需手動編寫類繼承 QWidget/QDialog 並在構造函數中 ui.setupUi(this)。
  • Designer Form Class(界面設計師類):生成 .h、.cpp、.ui 三文件,包含繼承自 QWidget/QDialog 的類定義與實現,自動調用 setupUi。

解決方案

正確創建帶代碼的對話框類

  1. File → New File or Project
  2. 選擇 Qt → Designer Form Class(非 Designer Form)
  3. 選擇基類:QDialog(對話框)、QWidget(窗口)、QMainWindow(主窗口)
  4. 命名類名(如 MyDialog),勾選生成 .h/.cpp/.ui
  5. 完成,即獲得可直接使用的 C++ 類

手動關聯 .ui 文件(若已誤建 Designer Form)

// 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 文件編譯機制

.ui 為 XML 格式,構建時由 uic (User Interface Compiler) 編譯生成 ui_XXX.h,包含 Ui::ClassName 類,內含 setupUi(QWidget*) 方法。CMake/qmake 自動處理此過程,無需手動調用 uic。

Qt 4 到 Qt 5 遷移注意點

  • 模板名稱變更:Qt 4 的「Qt Designer Form Class」對應 Qt 5 的「Designer Form Class」。
  • 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 模板差異,能避免此類困惑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved