2

Qtでは、クラスのないデザイナーフォームを作成しました。つまり、基本的には、myform.uiファイルがあります。フォームを表示するにはどのコードを書く必要がありますか?

4

3 に答える 3

6

セクションの .pro に ui ファイルを含める(d)と、FORMSビルド プロセス中に特別なヘッダー ファイルが生成されます。このヘッダー ファイルをインクルードし、それを使用して、実行時に必要な QWidget に子ウィジェットを追加します。

この例の ui ファイルはmywidget.uiと呼ばれます。.pro ファイルには、次の行があります。

FORMS += mywidget.ui

QtCreator はプロジェクト エクスプローラーにファイルを表示します。プロジェクトのビルド時にヘッダー ファイルが生成されないため、この手順は重要です。

生成されたヘッダー ファイルはui_mywidget.hと呼ばれ、設計されたウィンドウを構成するクラスが呼び出さUi::MyWidgetれ、次のように使用できます。

解決策 1 (新しい「 Qt Designer Form Class 」を作成するときに QtCreator が提案する方法):

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

private:
    Ui::MyWidget *ui;     // Pointer to the UI class where the child widgets are
};

#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);    // Create and add the child widgets to this widget
}

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

これで、このウィジェットを使用する準備が整い、インスタンス化するたびにデザイナーで作成した子ウィジェットが含まれます。

MyWidget widget;
widget.show();

解決策 2 (QWidget から継承せずに):

#include "ui_mywidget.h"
...
QWidget *widget = new QWidget(...);
Ui::MyWidget ui;         // Instance of the UI class where the child widgets are
ui.setupUi(widget);      // Create and add the child widgets to this widget
widget->show();
...
于 2012-10-05T17:14:36.083 に答える
0

QUiLoaderを使用して ui ファイルをロードできます。

于 2012-10-05T16:49:20.553 に答える