乒乓球世界杯_世界杯结束时间 - 0123838.com
首页中国对巴西世界杯正文

关于QWidget里面无法显示第二个QWidget

2025-08-15 13:53:25

问题背景: 在一个继承了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)

菀的笔画顺序 手机闪光灯有多少瓦,oppo的小孔灯是多少瓦一个
相关内容