QT Creator設定 – Embedding of the UI Class

Options > Designer > Class Generation

.Embedding of the UI Class (UI Class嵌入方式)
– Aggregation as a pointer member (以指標成員方式聚合)
– Aggregation (聚合)
– Multiple inheritance (多重繼承)


這會影響”Add new..” > “Qt Designer Form Class”時,*.h / *.cpp裏面插入ui程式碼的方式。

.Aggregation as a pointer member (以指標成員方式聚合)
– QT Designer預設值。ui的取用方式是ui->xxx。打”->”總覺得比打”.”麻煩…。
– .h裏面是include <QWidget>,在.cpp才include ui_form.h。不像其它方法都是在.h裏面include ui_form.h
– 需要宣告namespace,麻煩。
– ui用完還得自己delete。
– 很囉嗦的一種方法,不知為啥要預設這種的。

———- form.h ———-
#include <QWidget>

namespace Ui {
  class Form;
}

class Form : public QWidget {
public:
  Form(QWidget *parent = 0);
  ~Form();
private:
  Ui::Form *ui;
};

———-form.cpp———-
#include “form.h”
#include “ui_form.h”

Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form)
{
  ui->setupUi(this);
}

Form::~Form()
{
  delete ui;
}

.Aggregation (聚合)
– ui的取用方式是ui.xxx,用起來舒服。
– 宣告也不會很囉嗦。

———- form.h ———-
#include “ui_form.h”

class Form : public QWidget {
public:
  Form(QWidget *parent = 0);
private:
  Ui::Form ui;
};

———-form.cpp———-
#include “form.h”

Form::Form(QWidget *parent) : QWidget(parent){
  ui.setupUi(this);
}

.Multiple inheritance (多重繼承)
– ui取用方式是xxx(直接以ui裏面物件名稱取用),容易出事…。
– 宣告方式簡單,不過繼承太多東西也是麻煩。

———- form.h ———-
#include “ui_form.h”

class Form : public QWidget, private Ui::Form {
public:
  Form(QWidget *parent = 0);
};

———-form.cpp———-
#include “form.h”

Form::Form(QWidget *parent) : QWidget(parent){
  setupUi(this);
}

結論:
所以還是比較習慣用Aggregation來作。

在 “QT Creator設定 – Embedding of the UI Class” 有 1 則留言

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *