码上通QT实战25--报警页面01-报警布局设计

1、前言

Qt界面设计基础

Qt是一个跨平台的C++图形用户界面应用程序框架,广泛用于开发GUI程序。Qt Designer是Qt提供的可视化设计工具,允许通过拖放组件快速构建界面。

使用Qt Designer创建界面时,可以拖拽按钮、文本框等控件到主窗口上,通过属性编辑器调整控件属性。生成的界面文件保存为.ui格式,可通过uic工具转换为C++代码。

常用Qt控件

Qt 提供了丰富的控件(Widgets)用于构建图形用户界面(GUI),以下是常见分类及典型控件:

基础控件
  • QPushButton:按钮控件,支持点击事件和样式自定义。
  • QLabel:文本或图片显示控件,支持富文本和超链接。
  • QLineEdit:单行文本输入框,支持输入验证和占位符。
  • QTextEdit:多行富文本编辑器,支持HTML格式。
  • QComboBox:下拉选择框,支持可编辑选项和动态添加项。
  • QCheckBox:复选框,支持三态(选中/未选中/部分选中)。
  • QRadioButton :单选按钮,通常与QButtonGroup配合使用。
布局与容器
  • QWidget:所有控件的基类,可作为容器使用。
  • QFrame:带边框的容器,支持多种样式(如面板、线框)。
  • QTabWidget:标签页容器,用于分页显示内容。
  • QGroupBox:分组框,提供标题和边框的容器。
  • QScrollArea:滚动区域,用于显示超出可视范围的内容。
高级控件
  • QTableView/QTreeView/QListView:模型-视图架构的表格、树形和列表视图。
  • QProgressBar:进度条,支持水平/垂直方向和自定义样式。
  • QSlider/QSpinBox/QDoubleSpinBox:滑块、数字输入框,用于数值调整。
  • QDateTimeEdit:日期和时间选择器。
  • QFileDialog/QColorDialog:文件和颜色选择对话框。
特殊用途控件
  • QWebEngineView:嵌入式浏览器控件(基于Chromium)。
  • QOpenGLWidget:用于OpenGL渲染的窗口部件。
  • QSplitter:可拖动的分割窗口,调整子控件大小。
  • QStackedWidget:堆叠控件,同一时间只显示一个子控件。

布局管理

Qt提供多种布局管理器自动排列控件。QHBoxLayout水平排列控件,QVBoxLayout垂直排列控件。QGridLayout将控件放置在网格中,QFormLayout创建表单样式布局。

布局管理器自动处理控件大小和位置,适应窗口尺寸变化。嵌套布局可以实现复杂界面设计,混合使用水平和垂直布局构建多区域界面。

样式与主题

Qt支持CSS样式表定制控件外观。通过setStyleSheet方法设置控件样式,支持背景色、边框、字体等属性。预定义样式包括Windows、Fusion等,可通过QApplication::setStyle切换。

信号与槽机制

Qt使用信号与槽实现对象间通信。信号在事件发生时被发射,槽函数响应信号执行操作。connect函数建立信号与槽的连接,支持多种连接类型。

自定义控件

继承现有Qt控件创建自定义组件。重写paintEvent实现自定义绘制,使用Q_PROPERTY定义可动画属性。自定义控件可以像标准控件一样在Qt Designer中使用。

动画效果

Qt动画框架为界面元素添加动态效果。QPropertyAnimation动画化控件属性,QParallelAnimationGroup并行执行多个动画。Easing曲线控制动画变化速率。

2、跟我干

1、整体划分

垂直布局的基本概念

在Qt中,垂直布局(QVBoxLayout)是一种常用的布局管理器,用于将控件沿垂直方向依次排列。所有添加到垂直布局中的控件会按照添加顺序从上到下排列,默认间距和边距由当前样式决定。垂直布局可与其他布局(如水平布局QHBoxLayout)嵌套使用。

注意事项

  • 垂直布局会自动调整控件大小以适应布局区域,可通过setSizeConstraint修改约束条件。

  • 若需要固定控件大小,需在控件中设置setMinimumSizesetMaximumSize

  • 删除控件时需调用removeWidget(),避免内存泄漏。

2、上部布局

QHBoxLayout是Qt中用于水平排列子控件的布局管理器,属于QLayout的子类。它将子控件从左到右依次排列,默认情况下控件之间没有间距。创建包含三个按钮的水平布局:

cpp 复制代码
QWidget *window = new QWidget;
QHBoxLayout *layout = new QHBoxLayout;

QPushButton *btn1 = new QPushButton("Left");
QPushButton *btn2 = new QPushButton("Center");
QPushButton *btn3 = new QPushButton("Right");

layout->addWidget(btn1);
layout->addStretch(1);
layout->addWidget(btn2);
layout->addStretch(1);
layout->addWidget(btn3);

window->setLayout(layout);
window->show();

3、下部布局

QTableWidget 是 PyQt/PySide 中用于显示和编辑表格数据的控件,继承自 QTableView。它提供了单元格级别的操作接口,适合处理小型或中等规模的二维数据。支持自定义行列、单元格内容、样式等。

常用方法

  • table.clear():清空表格内容和标题。

  • table.insertRow(row):在指定位置插入行。

  • table.removeRow(row):删除指定行。

  • table.item(row, col):获取指定单元格的 QTableWidgetItem 对象。

cpp 复制代码
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem  

app = QApplication([])  
table = QTableWidget()  
table.setRowCount(3)  
table.setColumnCount(2)  
table.setHorizontalHeaderLabels(["Name", "Age"])  
table.setItem(0, 0, QTableWidgetItem("Alice"))  
table.setItem(0, 1, QTableWidgetItem("25"))  
table.show()  
app.exec_()  

4、样式设置

QSS(Qt Style Sheets)是 Qt 框架中用于自定义控件外观的样式表语言,语法类似于 CSS。通过 QSS 可以修改控件的颜色、字体、边框、背景等属性。QSS 由选择器和声明块组成,选择器指定目标控件,声明块包含属性和值:

cpp 复制代码
QPushButton {
    background-color: #4CAF50;
    border: none;
    color: white;
    padding: 10px 20px;
}
cpp 复制代码
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 white, stop:1 green);
border: 2px solid gray;
border-radius: 5px;
css 复制代码
/* 时间控制样式 */
QDateEdit{
	color:"#444444"; 
	font-size:15px;
	border:none;
	background:"#DDFFFFFF";
}
QDateEdit::drop-down{
	subcontrol-origin:padding;
	subcontrol-position:top right;
	width:20px;
	border:none;
}
QDateEdit::down-arrow{
	width:10px;
	image:url(:/imgs/down_true.png);
}
QDateEdit::down-arrow:!enabled{
	image:url(:/imgs/down_false.png);
}
QDateEdit#de_start,#de_end{
	background-color:#55FFFFFF;
	border-radius:5px;
	padding:2px 5px;
}

/* 按钮样式 */
QPushButton{
	width:80px;
	height:26px;
	color:white;
	border:none;
    font-size:15px;
	border-radius:5px;
	background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 "#bb3D99FB",stop:1 "#dd2160D8");
}
QPushButton:hover{
	background-color: qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 "#3D99FB",stop:1 "#2160D8");
}

#pb_clear{
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #ccffaf7a, stop:1  #dde58415);
}
#pb_clear:hover{
	background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #eeffaf7a, stop:1  #e58415);
}



/* 第二行控件样式 */

QTableWidget{
	border:none;
	border-radius:5px;
	background-color:transparent;
}
QTableWidget::item:selected{
	background-color:"#22409EFE";
	color:#555555;
}
/*表头*/
QHeaderView::section{
	text-align:center;
	background:#FFFFFF;
	padding:3px;
	margin:0px;
	color:#555555;
	border:none;
	border-left-width:0;
	height:20px;
}

5、构造方法

Stretch 是 Qt 样式表中用于控制布局空间分配的重要属性,通常用于 QBoxLayout(如 QHBoxLayoutQVBoxLayout)中。它决定了控件在布局中的拉伸行为,从而灵活调整控件间的空间分布。在布局中添加 stretch 可以在控件之间或控件周围插入可伸缩的空间,通过 setStretchFactor 可以调整布局中某个控件的拉伸比例:通过合理使用 stretch,可以轻松实现响应式布局,适应不同窗口尺寸或内容变化的需求。

6、运行测试

7、小结

Qt 提供了丰富的控件(Widgets)用于构建图形用户界面(GUI),以下是常见分类及典型控件:

基础控件

  • QPushButton:按钮控件,支持点击事件和样式自定义。

  • QLabel:文本或图片显示控件,支持富文本和超链接。

  • QLineEdit:单行文本输入框,支持输入验证和占位符。

  • QTextEdit:多行富文本编辑器,支持HTML格式。

  • QComboBox:下拉选择框,支持可编辑选项和动态添加项。

  • QCheckBox:复选框,支持三态(选中/未选中/部分选中)。

  • QRadioButton :单选按钮,通常与QButtonGroup配合使用。

布局与容器

  • QWidget:所有控件的基类,可作为容器使用。

  • QFrame:带边框的容器,支持多种样式(如面板、线框)。

  • QTabWidget:标签页容器,用于分页显示内容。

  • QGroupBox:分组框,提供标题和边框的容器。

  • QScrollArea:滚动区域,用于显示超出可视范围的内容。

高级控件

  • QTableView/QTreeView/QListView:模型-视图架构的表格、树形和列表视图。

  • QProgressBar:进度条,支持水平/垂直方向和自定义样式。

  • QSlider/QSpinBox/QDoubleSpinBox:滑块、数字输入框,用于数值调整。

  • QDateTimeEdit:日期和时间选择器。

  • QFileDialog/QColorDialog:文件和颜色选择对话框。

复制代码
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,请动动你的金手指,祝您早日实现财务自由。
相关推荐
a程序小傲1 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
HellowAmy2 小时前
我的C++规范 - 玩一个小游戏
开发语言·c++·代码规范
徐先生 @_@|||2 小时前
Palantir Foundry 五层架构模型详解
开发语言·python·深度学习·算法·机器学习·架构
SunkingYang3 小时前
QT中如何遍历QStringList
qt·解析·遍历·方式·读取·qstringlist
tang777893 小时前
爬虫如何绕过绕过“5秒盾”Cloudflare:从浏览器指纹模拟到Rust求解之不完全指南
开发语言·爬虫·rust·cloudflare
Yuer20253 小时前
什么是 Rust 语境下的“量化算子”——一个工程对象的最小定义
开发语言·后端·rust·edca os·可控ai
hqwest3 小时前
码上通QT实战26--系统设置01-系统设置布局
开发语言·qt·qss·qt基础控件·qt布局控件·qt表格控件
薛定谔的猫19823 小时前
llama-index Embedding 落地到 RAG 系统
开发语言·人工智能·python·llama-index
jghhh014 小时前
传递对准MATLAB仿真程序
开发语言·matlab