码上通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:文件和颜色选择对话框。

复制代码
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,请动动你的金手指,祝您早日实现财务自由。
相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner12 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript