• 3411阅读
  • 3回复

向qt的布局中添加 widget,使得布局自动增加.看了一个帖子,无法实现阿。 [复制链接]

上一主题 下一主题
离线caiwei_cs
 

只看楼主 倒序阅读 楼主  发表于: 2016-12-29
找到了一个帖子:

和楼主一模一样的需求。
有高手给出解决方案:http://bbs.csdn.net/topics/390291031?page=1
button->updateGeometry ();
//resize(sizeHint());//这一句如果要的话程序会消失。

但是我试了一下button->updateGeometry ();并不起作用。

不知道是不是哪里不对。如果尝试可以,不知道能不能请给出完整代码,我看看是不是我哪里设置错了。

我的测试代码为:

  1. Widget::Widget(QWidget *parent) :
  2.     QWidget(parent),
  3.     ui(new Ui::Widget)
  4. {
  5.     ui->setupUi(this);
  6.     w1 = new QWidget(this);
  7.     w1->setStyleSheet("background-color:red;");
  8.     w1->setFixedSize(150,20);
  9.     w2 = new QWidget(this);
  10.     w2->setStyleSheet("background-color:green;");
  11.     w2->move(20,20);
  12.     w2->setFixedSize(150,60);
  13.     w3 = new QWidget(this);
  14.     w3->setStyleSheet("background-color:yellow;");
  15.     w3->move(30,30);
  16.     w3->setFixedSize(150,100);
  17.     w1->show();
  18.     w2->show();
  19.     w3->show();
  20.     wm = new QWidget(this);
  21.     wm->setStyleSheet("background-color:blue;");
  22.     wm->setContentsMargins(0,0,0,0);
  23.     wm->resize(w1->width()+30,w1->height()+w2->height()+w3->height());
  24.     wm->move(10,10);
  25.     layoutmy = new QVBoxLayout(this);
  26.     layoutmy->addWidget(w1);
  27.     layoutmy->addWidget(w2);
  28.     layoutmy->addWidget(w3);
  29.     wm->setLayout(layoutmy);
  30.     wm->show();
  31. }
  32. Widget::~Widget()
  33. {
  34.     delete ui;
  35. }
  36. void Widget::on_pushButton_test_clicked()
  37. {
  38.     QPushButton *button = new QPushButton(this);
  39.     button->setStyleSheet("background-color:white;");
  40.     int index = layoutmy->indexOf(w1);
  41.     layoutmy->insertWidget(index,button);
  42.     button->updateGeometry();
  43. }



离线caiwei_cs

只看该作者 1楼 发表于: 2016-12-30
自己顶一下
离线caiwei_cs

只看该作者 2楼 发表于: 2017-01-03
自己顶一下。
离线272064949

只看该作者 3楼 发表于: 2017-01-03
有两种方法可以。

1, 只有布局才能自动更改界面的大小, 在你的代码的构造函数的最后面加上
ui->verticalLayout->addWidget(wm);

把wm添加到布局文件中

2, 把wm父指定为空。
这样  wm = new QWidget; 不要把this做为父传到wm里面去。
让它做为一个单独的窗口显示。


不要轻易的指定一个控件和布局的父,  要根据情况和你的需求来指定, 要不乱套。
快速回复
限100 字节
 
上一个 下一个