0
点赞
收藏
分享

微信扫一扫

面向对象七大(五大)基本原则

宁静的猫 2023-05-20 阅读 104
Qt

一、布局管理器

1.1、布局管理器的作用

  • 自动调整控件的位置,包括控件之间的间距、对齐等
  • 当用户调整窗口大小时,位于布局管理器内的控件也会随之调整大小,从而保持整个界面的美观

1.2、布局管理器类继承结构图

在这里插入图片描述

二、使用布局管理器

2.1、QVBoxLayout(垂直布局)

在这里插入图片描述

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//创建主窗口
	QWidget widget;
	//设置窗口标题
	widget.setWindowTitle("QVBoxLayout");
	//设置窗口大小
	widget.resize(500, 250);

	//创建垂直布局管理器
	QVBoxLayout *layout = new QVBoxLayout;
	//设置布局管理器中所有控件从下往上依次排列
	layout->setDirection(QBoxLayout::BottomToTop);

	//连续创建 3 个文本框,并设置它们的背景和字体大小
	QLabel lab1("Label1");
	lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}");
	lab1.setAlignment(Qt::AlignCenter);
	QLabel lab2("Label2");
	lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}");
	lab2.setAlignment(Qt::AlignCenter);
	QLabel lab3("Label3");
	lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}");
	lab3.setAlignment(Qt::AlignCenter);

	//组件的伸缩系数比是 1:1:1
	layout->addWidget(&lab3, 1);
	layout->addWidget(&lab2, 1);
	layout->addWidget(&lab1, 1);

	//将布局管理器添加到widget窗口中
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}

2.2、QHBoxLayout(水平布局)

在这里插入图片描述

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//创建主窗口
	QWidget widget;
	//设置窗口标题
	widget.setWindowTitle("QHBoxLayout");
	//设置窗口大小
	widget.resize(500, 250);

	//创建水平布局管理器
	QHBoxLayout *layout = new QHBoxLayout;
	//设置布局管理器中所有控件的布局方向为从右往左依次排列
	layout->setDirection(QBoxLayout::RightToLeft);

	//连续创建 3 个文本框,并设置它们的背景和字体大小
	QLabel lab1("Label1");
	lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}");
	lab1.setAlignment(Qt::AlignCenter);
	QLabel lab2("Label2");
	lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}");
	lab2.setAlignment(Qt::AlignCenter);
	QLabel lab3("Label3");
	lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}");
	lab3.setAlignment(Qt::AlignCenter);

	//组件的伸缩系数比是 1:1:1
	layout->addWidget(&lab3, 1);
	layout->addWidget(&lab2, 1);
	layout->addWidget(&lab1, 1);

	//将布局管理器添加到 widget 窗口中
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}

2.3、QGridLayout(网格布局)

在这里插入图片描述

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//创建主窗口
	QWidget widget;
	//设置窗口标题
	widget.setWindowTitle("QGridLayout");
	//设置窗口大小
	widget.resize(500, 250);

	//创建网格布局管理器
	QGridLayout *layout = new QGridLayout;

	//连续创建 3 个文本框,并设置它们的背景和字体大小
	QLabel lab1("Label1");
	lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}");
	lab1.setAlignment(Qt::AlignCenter);
	QLabel lab2("Label2");
	lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}");
	lab2.setAlignment(Qt::AlignCenter);
	QLabel lab3("Label3");
	lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}");
	lab3.setAlignment(Qt::AlignCenter);
	QLabel lab4("Label4");
	lab4.setStyleSheet("QLabel{background:#aaaaaa;font:20px;}");
	lab4.setAlignment(Qt::AlignCenter);
	QLabel lab5("Label5");
	lab5.setStyleSheet("QLabel{background:#bbbbbb;font:20px;}");
	lab5.setAlignment(Qt::AlignCenter);

	//组件添加到网格布局管理器
	layout->addWidget(&lab1, 0, 0);
	layout->addWidget(&lab2, 0, 1);
	layout->addWidget(&lab3, 1, 0, 1, 2);
	layout->addWidget(&lab4, 2, 0);
	layout->addWidget(&lab5, 2, 1);

	//将布局管理器添加到 widget 窗口中
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}

2.4、QFormLayout(表单布局)

在这里插入图片描述

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//创建主窗口
	QWidget widget;
	//设置窗口大小
	widget.resize(500, 250);
	//设置窗口标题
	widget.setWindowTitle("QFormLayout");

	//创建表单布局管理器
	QFormLayout* layout = new QFormLayout();
	//设置表单中的标签都位于控件的上方
	layout->setRowWrapPolicy(QFormLayout::WrapAllRows);
	//添加 3 行输入框和标签
	layout->addRow("Name:", new QLineEdit());
	layout->addRow("Email:", new QLineEdit());
	layout->addRow("Adress:", new QLineEdit());
	//设置行间距和列间距为 10
	layout->setSpacing(10);
	//将 layout 表单添加到 widget 窗口中
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}

2.5、QStackedLayout(分组局管理器)

在这里插入图片描述

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	//创建主窗口
	QWidget widget;
	//设置窗口标题
	widget.setWindowTitle("QStackedLayout");
	//设置窗口大小
	widget.resize(500, 250);

	//创建一个列表
	QListWidget *listWidget = new QListWidget(&widget);
	listWidget->setMinimumWidth(150);
	listWidget->setFont(QFont("宋体", 14));
	listWidget->addItem("QPushButton");
	listWidget->addItem("QLabel");
	listWidget->addItem("QLineEdit");

	//新建 3 个窗口,分别放置文本框、按钮和单行输入框
	QWidget widget1;
	widget1.setMinimumSize(200, 200);
	QPushButton but1("PushButton", &widget1);

	QWidget widget2;
	widget2.setMinimumSize(200, 200);
	QLabel lab1("This is a Label", &widget2);

	QWidget widget3;
	widget3.setMinimumSize(200, 200);
	QLineEdit edit("This is a QLineEdit", &widget3);

	//创建一个分组布局,将 3 个窗口添加到分组控件中
	QStackedLayout *stackedLayout = new QStackedLayout;
	stackedLayout->addWidget(&widget1);
	stackedLayout->addWidget(&widget2);
	stackedLayout->addWidget(&widget3);

	//向主窗口中添加一个水平布局控件
	QHBoxLayout *layout = new QHBoxLayout;
	layout->addWidget(listWidget, 1);
	layout->addLayout(stackedLayout, 4);

	//将 layout 水平布局控件添加到 widget 窗口中
	widget.setLayout(layout);
	widget.show();

	//连接信号和槽,实现当点击列表中的某一项,切换分组布局管理器显示的控件
	QObject::connect(listWidget, &QListWidget::currentRowChanged, stackedLayout, &QStackedLayout::setCurrentIndex);
	return a.exec();
}
举报

相关推荐

0 条评论