Qt-Embedded编程实战指南:深入ProgressBar、Button和Menu

版权申诉
0 下载量 106 浏览量 更新于2024-10-09 收藏 1.61MB RAR 举报
资源摘要信息: "Qt-Embedded编程实战教程涵盖了Qt框架的基本组件和概念,适合嵌入式Linux开发人员。教程内容包括以下主题: 1. 9.1-hello:介绍了Qt的入门和一个简单的Hello World程序,演示了如何搭建Qt开发环境以及编写基本的程序结构。 2. 9.2-button:深入探讨了按钮控件的使用方法,包括不同类型的按钮如QPushButton、QToolButton等,以及如何处理按钮点击事件。 3. 9.3-signal&slot:介绍了Qt中的信号与槽机制,这是一种强大的事件驱动编程模型,用于对象间的通信。 4. 9.4-dialog:讲解了对话框的使用,包括标准对话框如QMessageBox和自定义对话框的设计与实现。 5. 9.5-layout:阐述了Qt布局管理器的使用,布局管理器负责在窗口中管理控件的位置和大小,包括QVBoxLayout、QHBoxLayout等。 6. 9.6-progressbar:演示了如何使用进度条控件来显示操作的进度信息,进度条是反馈长时间运行任务进度给用户的重要工具。 7. 9.7-text input:详细说明了文本输入控件的使用,如QLineEdit和QTextEdit等,以及它们如何处理用户的文本输入。 8. 9.8-menu:介绍了如何创建和管理菜单,包括主菜单、上下文菜单等,展示了如何通过菜单与用户进行交互。 9. 9.9-qt draw:讲解了Qt中的绘图系统,包括如何使用QPainter进行2D绘图和自定义控件的渲染。 10. 9.10-i18n:阐述了Qt国际化和本地化的实现,演示了如何为应用程序添加多语言支持。 11. 9.12-designer:介绍了Qt Designer的使用,这是一个可视化工具,用于设计和构建复杂的用户界面,而无需编写大量的代码。 该教程适用于已经具备一定编程基础和对Qt框架感兴趣的开发者,尤其是那些专注于嵌入式系统或希望学习如何使用Qt进行图形用户界面(GUI)开发的专业人士。通过本教程,读者可以掌握使用Qt框架开发具有专业外观和感觉的应用程序所需的技能。" 知识点梳理: Qt基础知识: - Qt是跨平台的应用程序和用户界面框架,主要用于C++语言的开发。 - Qt-Embedded专为嵌入式设备设计,是标准Qt框架的一个子集,专注于资源受限环境的开发。 - 开发者需要安装Qt开发环境和相关编译器来编写和编译Qt应用程序。 Qt控件和组件: - QPushButton是Qt中常见的按钮控件,用于接收用户的点击操作。 - Qt的信号与槽(Signal & Slot)机制是事件驱动编程的核心,用于对象间的通信。 - 对话框控件如QMessageBox用于显示标准对话框,而自定义对话框可提供更丰富的交互。 布局管理器: - 布局管理器是Qt中用于控件布局的工具,主要有QVBoxLayout、QHBoxLayout、QGridLayout等。 - 使用布局管理器可以简化界面的设计,确保在不同屏幕尺寸和分辨率下的适应性。 高级控件: - QProgressBar用于向用户展示一个操作的进度。 - 文本输入控件如QLineEdit用于单行文本输入,QTextEdit则用于多行文本编辑。 - 菜单系统包括QMenu和相关控件,用于构建应用程序的用户菜单。 绘图与自定义控件: - QPainter类用于在Qt中进行2D图形绘制。 - 自定义控件可以通过继承QWidget类并重写paintEvent方法来创建。 国际化(i18n)和本地化(l10n): - Qt提供了一套完整的国际化和本地化工具,方便开发者为应用添加多语言支持。 Qt Designer工具: - Qt Designer是一个基于GUI的工具,允许开发者通过拖放的方式来设计用户界面。 - 设计师可以使用Qt Designer创建窗口、布局和控件,并将设计转换成相应的C++代码。 总结: 该教程旨在提供从基础到高级的Qt-Embedded编程实战经验,帮助开发者掌握创建跨平台、美观且功能丰富的GUI应用程序的技能。通过实际操作和示例代码,学习者将能够深入理解Qt框架的核心特性,并能够在嵌入式Linux平台上开发出专业级的应用程序。

下面代码什么作用class MainWindow(QMainWindow, Ui_mainWindow): def init(self, parent=None): super(MainWindow, self).init(parent) self.setupUi(self) self.m_flag = False # style 1: window can be stretched # self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint) # style 2: window can not be stretched self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint) # self.setWindowOpacity(0.85) # Transparency of window self.minButton.clicked.connect(self.showMinimized) self.maxButton.clicked.connect(self.max_or_restore) # show Maximized window # self.maxButton.animateClick(10) self.closeButton.clicked.connect(self.close) self.qtimer = QTimer(self) self.qtimer.setSingleShot(True) self.qtimer.timeout.connect(lambda: self.statistic_label.clear()) # search models automatically 自动搜索模型 self.comboBox.clear() self.pt_list = os.listdir('./pt') self.pt_list = [file for file in self.pt_list if file.endswith('.pt')] self.pt_list.sort(key=lambda x: os.path.getsize('./pt/'+x)) self.comboBox.clear() self.comboBox.addItems(self.pt_list) self.qtimer_search = QTimer(self) self.qtimer_search.timeout.connect(lambda: self.search_pt()) self.qtimer_search.start(2000) # yolov5 thread self.det_thread = DetThread() self.model_type = self.comboBox.currentText() self.det_thread.weights = "./pt/%s" % self.model_type self.det_thread.source = '0' self.det_thread.percent_length = self.progressBar.maximum() self.det_thread.send_raw.connect(lambda x: self.show_image(x, self.raw_video)) self.det_thread.send_img.connect(lambda x: self.show_image(x, self.out_video)) self.det_thread.send_statistic.connect(self.show_statistic) self.det_thread.send_msg.connect(lambda x: self.show_msg(x)) self.det_thread.send_percent.connect(lambda x: self.progressBar.setValue(x)) self.det_thread.send_fps.connect(lambda x: self.fps_label.setText(x)) self.fileButton.clicked.connect(self.open_file) self.cameraButton.clicked.connect(self.chose_cam) self.rtspButton.clicked.connect(self.chose_rtsp) self.runButton.clicked.connect(self.run_or_continue) self.stopButton.clicked.connect(self.stop) self.comboBox.currentTextChanged.connect(self.change_model) self.confSpinBox.valueChanged.connect(lambda x: self.change_val(x, 'confSpinBox')) self.confSlider.valueChanged.connect(lambda x: self.change_val(x, 'confSlider')) self.iouSpinBox.valueChanged.connect(lambda x: self.change_val(x, 'iouSpinBox')) self.iouSlider.valueChanged.connect(lambda x: self.change_val(x, 'iouSlider')) self.rateSpinBox.valueChanged.connect(lambda x: self.change_val(x, 'rateSpinBox')) self.rateSlider.valueChanged.connect(lambda x: self.change_val(x, 'rateSlider')) self.checkBox.clicked.connect(self.checkrate) self.saveCheckBox.clicked.connect(self.is_save) self.load_setting()

2023-06-03 上传
2023-06-10 上传