如何在锁定用户主窗口的同时使Qt对话框获取信息?

Ale*_*lex 3 c++ qt

我有一个Qt主窗口,会弹出一个对话框,其中有一个OK和Cancel按钮.这个对话框有一个简单的微调器,当按下OK或Cancel时,要求用户输入一个应该返回主窗口的数字(对于取消,它只会发回-1).

我想在mainWindow.cpp中的信号中使用代码,如下所示:

void mainWindow::slot_openNumberDlg(){
    // Create a new dialog
    numberDlg dlg( this );

    // Show it and wait for Ok or Cancel
    if( dlg.exec() == QDialog::Accepted ){
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果按下按钮时它被销毁,我如何将对话框中的微调器的值返回到主窗口?

我还考虑了一个替代解决方案,我将在mainWindow的构造函数中初始化对话框,但是直到一个信号激活mainWindow.cpp中的一个插槽才会显示它,如下所示:

// Create as pointer in main.h:
numberDlg *dlg;

// Initialize pointer and setup listener in constructor (main.cpp):
mainWindow::mainWindow(){
    dlg = new numberDlg();
    QObject::connect( dlg, SIGNAL( sig_retVal(int) ), ui->widget, SLOT( slot_showNum(int) ) );
}

// Make a function to handle show/close:
void mainWindow::slot_numberOpenClose(bool trigger){
    if(trigger){
        dlg->show();
    } else {
    dlg->close();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以使用信号/插槽将对话框的微调器中的数字发送到mainWindow,但它不会锁定mainWindow.在接受或拒绝对话框之前,我不希望用户继续使用mainWindow.

关于如何锁定主窗口并将数字发送回主对话框关闭的任何想法?

Jak*_*les 7

你应该做的是在对话框类中创建一个返回所需值的函数,并在主窗口中使用它:

void mainWindow::slot_openNumberDlg(){
    // Create a new dialog
    numberDlg dlg( this );

    // Show it and wait for Ok or Cancel
    if( dlg.exec() == QDialog::Accepted ){
        m_theValue = dlg.myValue(); // <--
        return;
    }
} // dlg goes out of scope
Run Code Online (Sandbox Code Playgroud)

dlg不会被销毁,直到它超出我放置注释的范围,所以你的方法将正常工作.