我有一个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.
关于如何锁定主窗口并将数字发送回主对话框关闭的任何想法?
你应该做的是在对话框类中创建一个返回所需值的函数,并在主窗口中使用它:
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不会被销毁,直到它超出我放置注释的范围,所以你的方法将正常工作.