• 4019阅读
  • 4回复

如何自己实现模态对话框的exec()函数? [复制链接]

上一主题 下一主题
离线电动游星
 

只看楼主 倒序阅读 楼主  发表于: 2015-08-23
就比如说void func()里创建了这个QDialog,
void func()
{
   QDialog  dialog;
   switch(dialog.exec())
   case:。。。
   case:。。。
defaut:
  break;
  return;
}
在建立对话框后,这个func函数没有马上接着return,而是等dialog.exec()返回后再接着执行剩下的代码段,如何实现类似exec()这样的阻断当前函数,等待返回的功能。想到这样一个方法模拟exec()函数,但是达不到要求:把自己实现的这个对话框的destroy()信号和一个槽连接,这个槽改变一个变量的值,而在新建对话框的地方用While(true)循环判断这个变量的值,直到该对话框退出后改变此变量值,退出while循环。但是这样似乎会阻扰事件传递,和exec()这个函数不一样。怎样更接近的模拟模态对话框的exec()这个函数?
离线电动游星

只看该作者 1楼 发表于: 2015-08-23
在While(true)这个无限循环里加上qApp->processEvents();似乎要好一点
离线电动游星

只看该作者 2楼 发表于: 2015-08-23
回 电动游星 的帖子
电动游星:在While(true)这个无限循环里加上qApp->processEvents();似乎要好一点 (2015-08-23 11:05) 

如果直接用While(true)这个无限循环阻断当前函数的话会让程序停止响应
离线leonchiong

只看该作者 3楼 发表于: 2015-08-24
在死循环里要加sleep睡眠时间 一般10ms
同时死循环所在的线程不能是界面线程
离线vilas

只看该作者 4楼 发表于: 2015-08-24
调用exec()来显示模式对话框。当用户关闭这个对话框,exec()将提供一个可用的返回值并且这时流程控制继续从调用exec()的地方进行。

qt文档这么写的。

例子:
QFileDialog *dlg = new QFileDialog( workingDirectory,
                QString::null, 0, 0, TRUE );
        dlg->setCaption( QFileDialog::tr( "Open" ) );
        dlg->setMode( QFileDialog::ExistingFile );
        QString result;
        if ( dlg->exec() == QDialog::Accepted ) {
            result = dlg->selectedFile();
            workingDirectory = dlg->url();
        }
        delete dlg;
        return result;
快速回复
限100 字节
 
上一个 下一个