我要想的一个效果,就是既是模态,又能与其它窗口交互。也就是又阻塞又交互的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();
}