本文描述QT c++ widget代码布局遵循的原则:实中套虚,虚中套实。
本文最后列出了代码下载链接。
在QT6.2.4 msvc2019编译通过。
所谓实是实体组件:比如界面框、文本标签、组合框、文本框、按钮、表格、图片框等。
所谓虚是Layout组件:比如垂直布局、水平布局、网格布局、表单布局、堆栈布局。
所谓布局是指定排列规则。
1.界面
图1-界面效果
图2-布局关系示意
说明:图中的实线示意实体组件,虚线示意布局方式
2.代码
2.1界面类头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QWidget>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void initUI();
private:
Ui::Widget *ui;
QLabel * lb;
QGroupBox * gb;
QLineEdit * le;
QPushButton *btn1;
QTextEdit * txt;
};
#endif // WIDGET_H
2.2 cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
initUI();
}
void Widget::initUI()
{
QVBoxLayout * mainlayout = new QVBoxLayout(this);指定布局属于啥组件
lb =new QLabel(this);
lb->setText("自动");
gb=new QGroupBox();
QHBoxLayout *hboxlayout=new QHBoxLayout(gb);//指定布局属于啥组件
le=new QLineEdit(this);
le->setFixedWidth(100);
le->setFixedHeight(20);
btn1 = new QPushButton(this);
btn1->setFixedWidth(100);
btn1->setFixedHeight(20);
btn1->setText(tr("button1"));
hboxlayout->addWidget(le);//指定布局包含啥组件
hboxlayout->addWidget(btn1);//指定布局包含啥组件
// gb->setLayout(hboxlayout);//指定组件包含啥布局,因为上没有一行的参数是gb,本行可忽略
mainlayout->addWidget (lb);//指定布局包含啥组件
mainlayout->addWidget(gb);//指定布局包含啥组件
this->setLayout(mainlayout);
}
Widget::~Widget()
{
delete ui;
}
3.代码下载链接