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