Qt 笔记5--Qt 拉伸窗体

 

正常情况下,Qt主窗体拉伸,但内部子窗体大小及位置并未发生该表,导致出现一部分空白区域,因此实际中为了美观需要实现其动态拉伸和调整效果。以下为笔者通过重新resizeEvent方法实现的一个简单拉伸案例,相应学习笔记贴在此处以便于后续参考。

 

1、功能介绍

以下3张图分别为(图1)原始界面,(图2)未做动态拉伸的界面,(图3)动态拉伸调整后的界面,我们希望从图1达到图3的效果,而非图2的效果。其方法为:重写resizeEventh方法,使主界面拉伸的时候就动态调整其中的子部件的大小或者位置。

图1

Qt 笔记5--Qt 拉伸窗体_Qt拉伸窗体

图2

Qt 笔记5--Qt 拉伸窗体_resizeEvent_02

图3

Qt 笔记5--Qt 拉伸窗体_窗体拉伸_03

 

2、源码实现

该方法比较简单,代码主要包括三个源文件:widget.h、widget.cpp和main.cpp,具体源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

protected:
virtual void resizeEvent(QResizeEvent *event) override;

private:
Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

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

void Widget::resizeEvent(QResizeEvent *event)
{
QSize qsize = this->size();
ui->widget_1->resize(qsize.width(),ui->widget_1->height());
ui->widget_3->resize(qsize.width()-ui->widget_2->width(),ui->widget_1->height());
ui->widget_4->resize(qsize.width(),qsize.height()-ui->widget_2->height()-ui->widget_2->height());
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();

return a.exec();
}

 

3、说明

以上代码默认测试环境为Qt 5.7,测试系统为Windows7 x64