如何从QDialog返回数据?

Igo*_*Oks 8 c++ oop qt qdialog

我正在尝试设计一个主窗口和一个QDialog,并找到从a返回数据的最佳方法QDialog.

现在我正在捕捉accepted()来自对话框的信号,之后我调用了返回数据的对话框函数.有没有更好的方法?

这是我现在的工作代码:

class MainWindow : public QMainWindow
{
// ...

public slots:
    void showDialog()
    {
        if (!myDialog)
        {
            myDialog = new Dialog();
            connect(myDialog, SIGNAL(accepted()), this, SLOT(GetDialogOutput()));
        }
        myDialog->show();
    }
    void GetDialogOutput()
    {
        bool Opt1, Opt2, Opt3;
        myDialog->GetOptions(Opt1, Opt2, Opt3);
        DoSomethingWithThoseBooleans (Opt1, Opt2, Opt3);
    }

private:
    void DoSomethingWithThoseBooleans (bool Opt1, bool Opt2, bool Opt3);
    Dialog * myDialog;

};
Run Code Online (Sandbox Code Playgroud)

对话:

class Dialog : public QDialog
{
// ...

public:
    void GetOptions (bool & Opt1, bool & Opt2, bool & Opt3)
    {
        Opt1 = ui->checkBox->isChecked();
        Opt2 = ui->checkBox_2->isChecked();
        Opt3 = ui->checkBox_3->isChecked();
    }
};
Run Code Online (Sandbox Code Playgroud)

那看起来很乱.有更好的设计吗?我错过了什么吗?

Joh*_*n.D 15

我经常这样做:

myDialog = new Dialog();
if(myDialog->exec())
{
    bool Opt1, Opt2, Opt3;
    myDialog->GetOptions(Opt1, Opt2, Opt3);
    DoSomethingWithThoseBooleans (Opt1, Opt2, Opt3);
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ith 5

这种方式很好,但你也可以看一下Dialog发出一个信号,比如myDialogFinished(bool, bool, bool)打开一个插槽MainWindow,节省了必须Dialog在它完成之后再回电话.