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 : 主窗口中添加布局和删除布局的问题.的主要内容,如果未能解决你的问题,请参考以下文章