QT 主窗口和非模态对话框切换 以及讯息通信
项目中要用到非模态窗口,程序一开始弹出一个主窗口来,点击一个按钮的时候弹出一个非模态窗口,虽然是一个比较简单的需求,但是在实现的过程中有各种问题。列一下自己遇到的问题并且说一下自己的解决方法。
1) 弹出的非模态窗口始终躲在最后面,并且非模态窗口上的控件不能操作。
主窗口是一个模态的窗口,非模态窗口在初始化的时候没有把主窗口作为他的父窗口。所以弹出来的非模态窗口就始终躲在最后面。
CModealDlg*dlg = new CModealDlg(this); //this 指针是主窗口的指针.dlg->setModal(false);
dlg->show(); //一定要调用show 函数,不能是exec 函数
这种弹出的非模态窗口类似find 窗口,始终在主窗口的前面
2) 弹出的非模态窗口和主窗口不能随意切换
弹出非模态窗口之后,如果点击主窗口的话,这个时候应该是主窗口显示在最前面,也就是说点哪个窗口哪个就应该在最前面。这个主要是因为你的主窗口是模态导致的。所以需要把主窗口设置为非模态。并且弹出的窗口不能设置父窗口。
CModealDlg*dlg = new CModealDlg(); //构造的时候不能带this 指针.
dlg->setModal(false);
dlg->show(); //一定要调用show 函数,不能是exec 函数
3) 窗口之间的通信使用信号和槽。 这个比较简单
非模态窗口声明一个信号。然后再创建非模态窗口的时候connect 这个信号就可以了
1) 声明信号
2) 在必要的地方触发信号
3) 连接信号
CModealDlg*dlg = new CModealDlg();
connect(dlg, SIGNAL(Frush(bool)), this, SLOT(OnTmpFrush(bool)));
QQ:1958601181
版权声明:本文为博主原创文章,未经博主允许不得转载。