赞
踩
问题背景:
在一个继承了QWidget的类(widget1)中,添加了按钮,想通过点击按钮弹出另一个窗口(称widget2,这个子窗口也是继承了QWidget类),并且widget2的父控件是widget1,然而widget2.show()之后并不会显示!!!
按钮的connect函数如下:
- connect(ui->pushButton,&QPushButton::clicked,this,[=](){
- // qDebug()<<"点击了pushbutton";
- SecondWidget *widget2 = new SecondWidget(this);
- widget2->show();
- });
1. 但是通过qDebug()可以发现,点击按钮后槽函数是有成功触发的,并且widget2的析构函数也有被调用,说明SecondWidget其实是创建了的。
2. 之后,我把SecondWidget换成了QMainWindow / QDialog之类的窗口,又或是把new SecondWidget(this)中的this去掉,竟然又可以显示。
3. 最后,在没有进行操作2的情况下,在widget2的构造函数中随便创建一个控件(如QPushButton),结果控件竟然出现在了父控件上!!!
看了好几个网上的答案,唯独这个博主的回答(参考)是真的讲通了的,也借此做了参考。
Qt帮助文档的QWidget里面有说明:
“Non-window widgets are child widgets, displayed within their parent widgets.”——非窗口widget是子部件,显示在它们的父widget中。
对于上述的问题,我认为可以理解为:父widget会把子widget当成是一个普通控件,只不过这个控件子widget(widget2)和父widget(widget1)合并了,因此在widget2构造函数的按钮才会出现在widget1中。
解决方案:在widget2中的构造函数加入:setWindowFlags(Qt::Window)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。