26

Help->Aboutアプリケーションメニューから呼び出される単純な「About」モーダルダイアログを作成したいと思います。QT Creator (.ui ファイル) でモーダル ダイアログ ウィンドウを作成しました。

メニューの「About」スロットにはどのコードを入れる必要がありますか?

今、私はこのコードを持っていますが、新しいモーダル ダイアログが表示されます (私の about.ui に基づいていません):

void MainWindow::on_actionAbout_triggered()
{
    about = new QDialog(0,0);
    about->show();
}

ありがとう!

4

2 に答える 2

41

ファイルから取得した UI を使用してダイアログをセットアップする必要があり.uiます。Qtコンパイラは、コードに含める必要があるuicファイルからヘッダー ファイルを生成します。ファイルが呼び出され、ダイアログの名前が であると.ui仮定すると、クラスを含むファイルが作成されます。UI を設定するにはさまざまな方法がありますが、できる限り簡単に行うことができます。.uiabout.uiAboutuicui_about.hUi_About

#include "ui_about.h"

...

void MainWindow::on_actionAbout_triggered()
{
    about = new QDialog(0,0);

    Ui_About aboutUi;
    aboutUi.setupUi(about);

    about->show();
}

サブクラス内の特定のダイアログに固有の機能を実装できるように、ダイアログをより適切にカプセル化するため、継承を使用することをお勧めします。

AboutDialog.h:

#include <QDialog>
#include "ui_about.h"

class AboutDialog : public QDialog, public Ui::About {
    Q_OBJECT

public:
    AboutDialog( QWidget * parent = 0);
};

AboutDialog.cpp:

AboutDialog::AboutDialog( QWidget * parent) : QDialog(parent) {

    setupUi(this);

    // perform additional setup here ...
}

使用法:

#include "AboutDialog.h"

...

void MainWindow::on_actionAbout_triggered() {
    about = new AboutDialog(this);
    about->show();
}

いずれにせよ、重要なコードはsetupUi()メソッドを呼び出すことです。

ところで:上記のコードのダイアログは非モーダルです。モーダル ダイアログを表示するにwindowModalityは、ダイアログのフラグを に設定するか、代わりに をQt::ApplicationModal使用します。exec()show()

于 2012-10-29T07:08:55.980 に答える
8

モーダル ダイアログの場合はexec()、QDialogs のメソッドを使用する必要があります。

about = new QDialog(0, 0);

// The method does not return until user closes it.
about->exec();

// In this point, the dialog is closed.

ドキュメントは言う:

モーダル ダイアログを表示する最も一般的な方法は、そのexec()関数を呼び出すことです。ユーザーがダイアログを閉じるexec()と、有用な戻り値が提供されます。


別の方法:モーダル ダイアログは必要ありません。ダイアログにモードレスを表示させ、その信号accepted()rejected()信号を適切なスロットに接続します。次に、すべてのコードを の直後に配置する代わりに、 acceptshow()スロットに配置できます。したがって、この方法を使用すると、実際にはモーダル ダイアログは必要ありません。

于 2015-06-21T20:46:49.093 に答える