查看完整版本: [-- 向qt的布局中添加 widget,使得布局自动增加.看了一个帖子,无法实现阿。 --]

QTCN开发网 -> Qt基础编程 -> 向qt的布局中添加 widget,使得布局自动增加.看了一个帖子,无法实现阿。 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

caiwei_cs 2016-12-29 11:17

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

找到了一个帖子:

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

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

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

我的测试代码为:

  1. Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);

        w1 = new QWidget(this);
        w1->setStyleSheet("background-color:red;");
        w1->setFixedSize(150,20);
        w2 = new QWidget(this);
        w2->setStyleSheet("background-color:green;");
        w2->move(20,20);
        w2->setFixedSize(150,60);
        w3 = new QWidget(this);
        w3->setStyleSheet("background-color:yellow;");
        w3->move(30,30);
        w3->setFixedSize(150,100);

        w1->show();
        w2->show();
        w3->show();

        wm = new QWidget(this);
        wm->setStyleSheet("background-color:blue;");
        wm->setContentsMargins(0,0,0,0);
        wm->resize(w1->width()+30,w1->height()+w2->height()+w3->height());
        wm->move(10,10);
        layoutmy = new QVBoxLayout(this);
        layoutmy->addWidget(w1);
        layoutmy->addWidget(w2);
        layoutmy->addWidget(w3);
        wm->setLayout(layoutmy);
        wm->show();
    }

    Widget::~Widget()
    {
        delete ui;
    }

    void Widget::on_pushButton_test_clicked()
    {
        QPushButton *button = new QPushButton(this);
        button->setStyleSheet("background-color:white;");

        int index = layoutmy->indexOf(w1);
        layoutmy->insertWidget(index,button);
        button->updateGeometry();
    }




caiwei_cs 2016-12-30 12:37
自己顶一下

caiwei_cs 2017-01-03 09:24
自己顶一下。

272064949 2017-01-03 14:54
有两种方法可以。

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

把wm添加到布局文件中

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


不要轻易的指定一个控件和布局的父,  要根据情况和你的需求来指定, 要不乱套。


查看完整版本: [-- 向qt的布局中添加 widget,使得布局自动增加.看了一个帖子,无法实现阿。 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled