3

Qt Creator には、ツール ウィンドウ (setWindowFlags(Qt::tool)) として mainwindow と QWidget があります。ツール ウィンドウを呼び出すと、ユーザーはいくつかの設定を変更できます。これらの変更により、メインウィンドウの一部のデータが変更されます。

ウィジェットを作成して表示し、メインウィンドウのデータを更新したいのですが、関数はウィジェットが閉じるのを待ちません。したがって、ショー後の更新手順はすぐに実行され、効果はありません。QMessageBox を表示すると、関数はユーザーが閉じるのを待ちます。

関数が待機するように QWidget に設定できるフラグまたは何かがありますか?

void userclicksonsettings(){
 settings = new Settings(this);  // Settings is a QWidget-class with ui
 settings->show();
 // function should wait till settings is closed
 // set up mainwindow with new values
}

ありがとう。

4

2 に答える 2

3

私はそれを解決しました。基本クラスとしてQWidgetの代わりにQDialogを使用すると、QDialog :: exec()でウィンドウを呼び出すことができます。親ウィジェットは、ウィンドウが再び閉じられるまで一時停止します。

編集:これが、バックアップディスクから掘り出したソリューションのソースです。とはいえ、私が最後にQtとこのコードを使用したのは数年前なので、間違っている可能性があります。アイデアを得るのに役立つことを願っています。

settingsForm.h

#include <QDialog>
class SettingsForm : public QDialog
{
    Q_OBJECT

public:
    explicit SettingsForm(QWidget *parent = 0);
    ~SettingsForm();
// other variables and slots etc.
};

settingsForm.cpp

#include "settingsform.h"
#include "ui_settingsForm.h"

#include <QColorDialog>

SettingsForm::SettingsForm(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SettingsForm)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::Tool);

// initializing functions
}

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

mainwindow.h

#include "settingsForm.h"
// ...

メインウィンドウからsettingsWindowを呼び出すには、オブジェクトを初期化し、QDialogのように呼び出します。

mainwindow.cpp

settingsform = new SettingsForm(this);
if(settingsform->exec() == QDialog::Accepted){
    // update form from settings
}

また、フォームで設定できるすべての変数の設定クラスもありました。これは、settingsFormに渡され、ユーザーが[OK]をクリックすると更新されます。

于 2012-07-27T13:14:37.573 に答える