QT:A画面调用B画面

今天,研究了下,QT中是怎么实现主窗口调用子窗口的。

其实就是用信号与槽机制。你想通过MENU调用子窗口就用QACTION绑定个槽调用;想通过按钮点击弹出窗口那就绑定信号click与你的自定义槽来实现调用。但是但是!不能直接声明对象,只能用指针对象。比如

test t;
t.show();

t = new test(NULL); // t为指针对象,已经在.h中声名
t->show();

前者不行。会出现当槽函数生命周期到了,即槽函数走完了,调用出来的子窗口也关了,这显然不是咱们的目的!

在调用的过程中我一开始还在构造指针的时候传了一个this。这个问题需要好好记录一下!即写成如下代码:

t = new test(this); // t为指针对象,已经在.h中声名
t->show();

这样做会让QT认为你想把当前窗口认为是你将要调用出来的窗口的父窗口。通俗点说就是A调用B,A是父窗口,B是子窗口。

这样QT就会做一些特殊处理!比如子窗口会镶嵌在父窗口中,并且变成无边框,背景透明。再比如,如果父窗口hide,则子窗口的任务栏程序图标也消失。 所以如果你不想让窗口之间有这种关系千万不要写this!写this的效果:

QT:A画面调用B画面_第1张图片 原本子窗口效果图

QT:A画面调用B画面_第2张图片 主窗口调用后,可以看出来就剩下个listview和关闭按钮,边框没了,背景也透明了。

你可能感兴趣的:(C++,QT,QT,画面调用)