![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
关于Qt子窗口和父窗口的问题
现有两个独立的继承自Qwidget窗口,一个是A,一个是B,现在我在A的构造函数中,实例化B,大概代码如下,B*b=newb(this);b->show();这样把a设置...
现有两个独立的继承自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里面完成的。 展开
问题2,假如b的实例化是在和a和b都没有联系的某个地方完成的,但我还是想让a成为b的父窗口,怎么获取a的指针?假设a是整个程序的主窗口,实例化是在main.cpp里面完成的。 展开
展开全部
你可能想要模态窗体,不是“父窗体”,那么这么用:
B b;
b.setParentWidget(&a); //B类增加一个方法,传入a的指针。
b->exec(); //模态显示,不用show
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到指定位置
展开全部
你可以不把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 事件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询