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修改约束条件。 -
若需要固定控件大小,需在控件中设置
setMinimumSize或setMaximumSize。 -
删除控件时需调用
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(如 QHBoxLayout 或 QVBoxLayout)中。它决定了控件在布局中的拉伸行为,从而灵活调整控件间的空间分布。在布局中添加 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:文件和颜色选择对话框。
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,请动动你的金手指,祝您早日实现财务自由。
