您的位置:首页 > 编程语言 > Qt开发

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

2018-01-27 13:03 519 查看
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 布局
相关文章推荐