当前位置:   article > 正文

关于QWidget里面无法显示第二个QWidget_qt的widget中放置widget不显示

qt的widget中放置widget不显示

问题背景:
       
在一个继承了QWidget的类(widget1)中,添加了按钮,想通过点击按钮弹出另一个窗口(称widget2,这个子窗口也是继承了QWidget类),并且widget2的父控件是widget1,然而widget2.show()之后并不会显示!!!


按钮的connect函数如下:

  1. connect(ui->pushButton,&QPushButton::clicked,this,[=](){
  2. // qDebug()<<"点击了pushbutton";
  3. SecondWidget *widget2 = new SecondWidget(this);
  4. widget2->show();
  5. });

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)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/118117
推荐阅读
  

闽ICP备14008679号