关于Qt子窗口和父窗口的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Qt子窗口和父窗口的问题相关的知识,希望对你有一定的参考价值。
现有两个独立的继承自Qwidget 窗口,一个是A,一个是B,现在我在A的构造函数中,实例化B,大概代码如下,B* b = new b(this); b->show();这样把a设置成为b的父窗口,但这样的结果是b被嵌入到a的内部了,b不再是独立的窗口了,如果我希望b是独立的窗口该怎么做?
问题2,假如b的实例化是在和a和b都没有联系的某个地方完成的,但我还是想让a成为b的父窗口,怎么获取a的指针?假设a是整个程序的主窗口,实例化是在main.cpp里面完成的。
B b;
b.setParentWidget(&a); //B类增加一个方法,传入a的指针。
b->exec(); //模态显示,不用show追问
我要的不是模态窗体,我可能没有说清楚,b.setParentWidget(&a); //B类增加一个方法,传入a的指针。你说的这句话我有点不明白,因为a是在main.cpp里面实例化的,但你建议的这三句话一般不是在main.cpp里面写的,关键是怎么把获取a的指针。设置一个全局变量吗?
追答b不想嵌入到a里面,那么b就是独立于a的窗体。根据你的描述,想把b做成一种类似底部状态栏的东西,始终跟随在a的底部。
如果b只是覆盖在a上面,不需要覆盖在a以外的画面上面的话,可以把b做成a的一个控件,这样简单。
如果不想把b做成a的控件,那就做成窗体。可以把b作为a的一个成员变量,在a的处理动作里,先把b给show出来,紧接着再把b给setgeomtry到指定位置
这样会用到resizeEvent和moveEVent吧,我刚才这样做出来了,效果不错,请问一下,Qt里面要做出这样的效果的常规解法是怎么做?同学说C#里面是做成停靠窗口,停靠上去后就可以跟着变化,Qt里面一般怎么做?我的b是一个不规则窗口,qt里面的停靠窗口能做成不规则的吗?
追答不规则窗体其实就是矩形窗体,只不过对某些区域的显示和操作忽略掉而已。
停靠方法参考矩形窗体即可。
关键是我不清楚矩形窗体的停靠方法,QDockWidget这个好像不行吧。
追答自行百度“qt 停靠”
参考技术A 你可以不把a设为b的父窗口,可以在B类中添加一个A*类型的成员,然后在构造函数中将a的地址付给b,这样就可以在B类中访问a对象了追问其实我想做的效果是在a的左下角是b窗体,b并不是点击按钮弹出的,而是一开始就存在的,b的宽度要和a的一致,b的高度是一个固定值,本来如果我知道a的指针,就可以求出a窗口的一些长度位置等属性来确定我b应该初始出现的位置,b->setgeomtry(0,a的高度-b的高度,b的宽度,b的高度)。有可能根本不需要什么子窗口父窗口之类的,本人Qt新手有些东西还不会用,望指点一下。
追答是不需要啊。
b要一开始就存在,那么b可以是a的成员变量,在a的构造函数中初始化。
b的宽度要与a一致,可以重载a的onsize 或者 onpaint 事件
嗯,是这样的,刚才做出来了。
追答记得采纳啊,亲
以上是关于关于Qt子窗口和父窗口的问题的主要内容,如果未能解决你的问题,请参考以下文章