本文主要是介绍QDialog windowmodal open 不能阻塞能交互,application exe 能阻塞不能交互, 实现又阻塞又交互的QDialog?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我要想的一个效果,就是既是模态,又能与其它窗口交互。也就是又阻塞又交互的QDialog。
如
void main( int argc, char *argv[] )
{
QApplication a( argc, argv);
...
LoginDialog dlg;
dlg.do();
...
MainWindow m;
m.show();
return a.exec();
}
在dlg.do() 时,需要对用户名密码校验。校验成功才能进入主窗口。校验时,又要弹出子窗口。
1, 用QDialog 的open,能与子窗口交互,但open后立即返回,就到了主界面.
2, 用QDialog的exec,不能与子窗口交互,这不符合需求。
实现方式就是,在LoginDialog 里添加 成员变量 QEventLoop.
//LoginDialog.h
class LoginDialog : public QDialog
{
LoginDialog();
...
void do();
std::shared_ptr<QEventLoop> mEventLoop;
}
//LoginDialog.cpp
LoginDialog::LoginDialog()
{
mEventLoop.reset( new QEventLoop(this));
}
LoginDialog::do()
{
show();
mEventLoop->exec();
}
这篇关于QDialog windowmodal open 不能阻塞能交互,application exe 能阻塞不能交互, 实现又阻塞又交互的QDialog?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!