码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-06-24 18:34:13      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:cond   是你   包含   设置   com   new   idg   方法   重要   

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 : 主窗口中添加布局和删除布局的问题.

标签:cond   是你   包含   设置   com   new   idg   方法   重要   

原文地址:https://www.cnblogs.com/xdl824/p/14926868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!