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

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

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值