Qt : 主窗口中添加布局和删除布局的问题.

Posted 许大力的成长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt : 主窗口中添加布局和删除布局的问题.相关的知识,希望对你有一定的参考价值。

1.主窗口添加布局.

都知道在QWidget中,进行布局很简单,直接类似如下即可:

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    //直接设置当前的布局.
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

但是当应用在主窗口时,这样使用却没有效果…这是因为,主窗口默认是包含菜单栏,工具栏,中心窗口,状态栏等,而我们设置的布局不应该应用在整个主窗口中,而是应该对中心窗口使用.所以我们得到如下代码来设置布局:

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    //创建一个窗口.设置窗口的布局.
    QWidget *widget = new QWidget(this);
    widget->setLayout(layout);
    //然后对主窗口设置新的中心窗口.也就是你布局好的窗口.
    this->setCentralWidget(widget);

2.删除原有布局.设置新的布局.
在主窗口中如果你想要删除之前的布局,而使用新的布局,那非常的简单,因为之前已经说了,主窗口内的是个中心窗口,所以只需要创建一个新的Widget,然后重新设置中心窗口即可.(不推荐!)

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    QWidget *widget = new QWidget();
    widget->setLayout(layout);
    this->setCentralWidget(widget);
    //重新创建一个窗体.
    QWidget *newWidget = new QWidget();
    QHBoxLayout *newLayout = new QHBoxLayout();
    newLayout->addWidget(firstButton);
    newLayout->addWidget(secondButton);
    newWidget->setLayout(newLayout);
    this->setCentralWidget(newWidget);

    delete widget;

但是上述方法看起来太蠢了,最重要的是虽然用户想要改变整体布局,但是却依旧使用同样的小控件,比如QLineEdit,QLabel,QPushButton等.那么新建QWidget的方法肯定是不可取的.所以我们可以直接修改原窗体的布局.

QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    QWidget *widget = new QWidget();
    widget->setLayout(layout);
    this->setCentralWidget(widget);

    //必须要先释放原来的布局!!!否则会出现下图结果:
    delete widget->layout();
    //这里修改为纵向布局了.
    QVBoxLayout *c = new QVBoxLayout();
    c->addWidget(firstButton);
    c->addWidget(secondButton);
    c->addWidget(lastButton);
    widget->setLayout(c);

//试图把一个布局设置到一个已经有布局的窗口中.

根据上面的方法,就可以在主窗口中添加和删除布局啦~

以上是关于Qt : 主窗口中添加布局和删除布局的问题.的主要内容,如果未能解决你的问题,请参考以下文章

Qt 创建者:小部件未添加到布局中

将应用程序的主窗口 GUI 布局更改为代码

QT 设计器中的布局

QT 主窗口 添加滚动条

QT 主窗口 添加滚动条

使用属性窗口在 QT 网格布局中设置小部件的行和列