QT 主窗口和非模态对话框切换 以及讯息通信

QT 主窗口和非模态对话框切换 以及消息通信

项目中要用到非模态窗口,程序一开始弹出一个主窗口来,点击一个按钮的时候弹出一个非模态窗口,虽然是一个比较简单的需求,但是在实现的过程中有各种问题。列一下自己遇到的问题并且说一下自己的解决方法。

1) 弹出的非模态窗口始终躲在最后面,并且非模态窗口上的控件不能操作。

     主窗口是一个模态的窗口,非模态窗口在初始化的时候没有把主窗口作为他的父窗口。所以弹出来的非模态窗口就始终躲在最后面。  

CModealDlg*dlg = new CModealDlg(this); //this 指针是主窗口的指针. 

dlg->setModal(false);

dlg->show();  //一定要调用show 函数,不能是exec 函数

     这种弹出的非模态窗口类似find 窗口,始终在主窗口的前面


2) 弹出的非模态窗口和主窗口不能随意切换

         弹出非模态窗口之后,如果点击主窗口的话,这个时候应该是主窗口显示在最前面,也就是说点哪个窗口哪个就应该在最前面。这个主要是因为你的主窗口是模态导致的。所以需要把主窗口设置为非模态。并且弹出的窗口不能设置父窗口。 QT 主窗口和非模态对话框切换 以及讯息通信

     CModealDlg*dlg = new CModealDlg(); //构造的时候不能带this 指针. 

dlg->setModal(false);

dlg->show();  //一定要调用show 函数,不能是exec 函数

       

         

3)  窗口之间的通信使用信号和槽。 这个比较简单

      非模态窗口声明一个信号。然后再创建非模态窗口的时候connect 这个信号就可以了


    1) 声明信号

QT 主窗口和非模态对话框切换 以及讯息通信

2) 在必要的地方触发信号

QT 主窗口和非模态对话框切换 以及讯息通信

     3)   连接信号

        CModealDlg*dlg = new CModealDlg();

connect(dlg, SIGNAL(Frush(bool)), this, SLOT(OnTmpFrush(bool)));



QQ:1958601181



版权声明:本文为博主原创文章,未经博主允许不得转载。