Qt官方中文教程:布局与部件详解

需积分: 11 3 下载量 79 浏览量 更新于2024-07-25 收藏 2.3MB PPT 举报
"Qt诺基亚官方中文教程L3 - Qt的布局与部件" 在Qt编程中,部件(Widgets)和布局(Layouts)是构建用户界面(UI)的基础元素。Qt是一个跨平台的C++图形用户界面应用程序开发框架,由诺基亚开发并广泛应用于各种操作系统,包括Windows、Linux、macOS等。本教程将深入讲解这两个关键概念。 部件(Widgets)是构成Qt UI的基本组件,如按钮(QPushButton)、文本框(QLineEdit)、标签(QLabel)等。它们提供了一种直观的方式来显示和交互数据。每个部件都有自己的属性和方法,用于定制其外观和行为。例如,通过设置部件的大小、颜色、字体等属性,可以实现特定的视觉效果。部件还可以通过信号和槽(Signals & Slots)机制与其他部件或类进行通信,这是Qt事件处理的核心。 布局(Layouts)是Qt UI设计中的另一个重要概念,它允许自动调整部件的位置和大小,以适应窗口或其他容器的变化。布局管理器(Layout Managers)如水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)和网格布局(QGridLayout),可以根据需要自动排列部件。当窗口被缩放或者新的部件被添加时,布局会确保所有部件都能适当地分布空间,从而提供良好的用户体验。 在Qt中,布局可以通过代码创建,也可以在Qt Designer这种图形化界面设计工具中可视化地拖放和配置。例如,可以将多个部件放入一个布局中,然后添加到父窗口,布局会自动处理这些部件的排列和尺寸调整。 在实际应用中,布局通常与部件结合使用,以构建复杂且响应式的用户界面。例如,一个包含“保存”和“取消”按钮的对话框,可以使用水平布局将两个按钮并排放置,无论对话框大小如何,按钮都会保持在一行上。同时,部件的属性可以进一步调整,如设置边距、对齐方式等,以满足特定的设计需求。 Qt的部件和布局系统为开发者提供了强大的工具来创建灵活、响应式的用户界面。理解并熟练掌握这两个概念,是开发高质量Qt应用程序的关键。通过诺基亚官方的Qt教育培训材料,学习者可以深入学习部件的使用技巧和布局的高级功能,提升开发效率和UI设计能力。

写出以下代码的函数说明:# 界面初始化,设置界面布局 def initUI(self): main_widget = QWidget() main_layout = QHBoxLayout() font = QFont('楷体', 15) # 主页面,设置组件并将组件放在布局上 left_widget = QWidget() left_layout = QVBoxLayout() img_title = QLabel("样本") img_title.setFont(font) img_title.setAlignment(Qt.AlignCenter) self.img_label = QLabel() img_init = cv2.imread(self.to_predict_name) h, w, c = img_init.shape scale = 400 / h img_show = cv2.resize(img_init, (0, 0), fx=scale, fy=scale) cv2.imwrite("images/show.png", img_show) img_init = cv2.resize(img_init, (224, 224)) cv2.imwrite('images/target.png', img_init) self.img_label.setPixmap(QPixmap("images/show.png")) left_layout.addWidget(img_title) left_layout.addWidget(self.img_label, 1, Qt.AlignCenter) left_widget.setLayout(left_layout) right_widget = QWidget() right_layout = QVBoxLayout() btn_change = QPushButton(" 上传图片 ") btn_change.clicked.connect(self.change_img) btn_change.setFont(font) btn_predict = QPushButton(" 开始识别 ") btn_predict.setFont(font) btn_predict.clicked.connect(self.predict_img) label_result_f = QLabel(' 花卉名称 ') self.result_f = QLabel("等待识别") self.label_info = QTextEdit() self.label_info.setFont(QFont('楷体', 12)) label_result_f.setFont(QFont('楷体', 16)) self.result_f.setFont(QFont('楷体', 24)) right_layout.addStretch() right_layout.addWidget(label_result_f, 0, Qt.AlignCenter) right_layout.addStretch() right_layout.addWidget(self.result_f, 0, Qt.AlignCenter) right_layout.addStretch() right_layout.addWidget(self.label_info, 0, Qt.AlignCenter) right_layout.addStretch() right_layout.addWidget(btn_change) right_layout.addWidget(btn_predict) right_layout.addStretch() right_widget.setLayout(right_layout)

2023-06-02 上传

import sys import random from PySide2.QtCore import Qt, QTimer from PySide2.QtGui import QPen from PySide2.QtCharts import QtCharts from PySide2.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView class RealTimeChart(QMainWindow): def __init__(self): super().__init__() # 创建QChart对象并设置标题 self.chart = QtCharts.QChart() self.chart.setTitle("Realtime Chart") # 创建QLineSeries对象并将其添加到QChart中 self.series = QtCharts.QLineSeries() self.chart.addSeries(self.series) # 创建QValueAxis对象并设置范围 self.axis_x = QtCharts.QValueAxis() self.axis_x.setRange(0, 100) self.chart.addAxis(self.axis_x, Qt.AlignBottom) # 创建QValueAxis对象并设置范围 self.axis_y = QtCharts.QValueAxis() self.axis_y.setRange(-1, 1) self.chart.addAxis(self.axis_y, Qt.AlignLeft) # 将QLineSeries与QValueAxis关联 self.series.attachAxis(self.axis_x) self.series.attachAxis(self.axis_y) # 创建QGraphicsScene对象并将QChart添加到场景中 self.view = QGraphicsView() self.scene = QGraphicsScene() self.scene.addItem(self.chart) self.view.setScene(self.scene) # 创建定时器,每隔一段时间更新曲线 self.timer = QTimer(self) self.timer.timeout.connect(self.update_chart) self.timer.start(50) # 设置窗口大小和标题 self.setCentralWidget(self.view) self.setGeometry(100, 100, 800, 600) self.setWindowTitle("Realtime Chart") def update_chart(self): # 随机生成一个数据点并添加到曲线中 x = self.series.count() y = random.uniform(-1, 1) self.series.append(x, y) # 移动坐标轴显示最近的数据 self.axis_x.setRange(x - 100, x) self.view.fitInView(self.chart, Qt.IgnoreAspectRatio) if __name__ == '__main__': app = QApplication(sys.argv) chart = RealTimeChart() chart.show() sys.exit(app.exec_())

2023-06-11 上传