QT初学者指南:创建第一个 HelloWorld 程序

4星 · 超过85%的资源 需积分: 10 10 下载量 114 浏览量 更新于2024-07-20 收藏 616KB DOC 举报
"QT学习笔记,初识QT库,Linux环境下的五子棋小游戏开发,C++编程,QWidget与QPushButton类的使用,编译错误分析及解决方法" 这篇QT学习笔记主要介绍了在Linux环境下如何开始QT编程,并通过一个简单的五子棋小游戏作为实践示例。QT是一个跨平台的应用程序开发框架,广泛用于桌面、移动和嵌入式设备的开发。在Linux系统中,首先检查系统是否已预装QT库,如果没有,可以通过系统设置的添加程序功能进行安装。 作者创建了一个名为“qt”的目录,并在其中编写了C++源代码文件hello.cpp。这个文件中包含了对QT库的基本使用,比如创建一个窗口对象(QWidget)和一个按钮对象(QPushButton)。QWidget是所有可视化组件的基础类,而QPushButton是常用的用户交互组件,用于触发特定的事件。 代码中,`QApplication`类负责管理应用程序的运行,`QWidget`的`setMinimumSize`和`setMaximumSize`函数用于设定窗口的尺寸范围,`QPushButton`的构造函数则用来创建按钮并设置其显示文本。`helloworld.setGeometry`函数用于设置按钮在窗口中的位置和尺寸。`a.setMainWidget(&mainwindow)`将窗口设置为主窗口,`mainwindow.show()`显示窗口,而`a.exec()`启动事件循环,等待用户的交互。 在编译代码时,使用`g++`命令并链接QT库(`-lqt`),如果出现找不到头文件的错误,可能是因为编译器没有正确配置头文件和库文件的搜索路径。通常,头文件位于/usr/include/目录下,而库文件位于/lib/或/usr/lib/目录下。如果遇到此类问题,可以通过指定-I选项添加头文件路径,-L选项添加库文件路径,或者确保系统路径已经包含了这些目录。 这篇笔记不仅提供了QT编程的初步实践,还涉及到问题排查和解决,对于初学者来说是一份很好的参考资料。通过这个例子,读者可以了解QT开发的基本流程,并学习到如何在Linux环境中使用QT库进行C++编程。后续的学习可能会涉及更多的QT组件、信号与槽机制、布局管理以及更复杂的UI设计。

import os from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QTreeView, QFileSystemModel class ImageViewer(QWidget): def init(self, folder_path): super().init() self.folder_path = folder_path self.image_dict = {} self.current_image = None self.setWindowTitle("Image Viewer") self.setFixedSize(1000, 600) self.image_label = QLabel(self) self.image_label.setAlignment(Qt.AlignCenter) self.tree_view = QTreeView() self.tree_view.setMinimumWidth(250) self.tree_view.setMaximumWidth(250) self.model = QFileSystemModel() self.model.setRootPath(folder_path) self.tree_view.setModel(self.model) self.tree_view.setRootIndex(self.model.index(folder_path)) self.tree_view.setHeaderHidden(True) self.tree_view.setColumnHidden(1, True) self.tree_view.setColumnHidden(2, True) self.tree_view.setColumnHidden(3, True) self.tree_view.doubleClicked.connect(self.tree_item_double_clicked) self.main_layout = QHBoxLayout(self) self.main_layout.addWidget(self.tree_view) self.main_layout.addWidget(self.image_label) self.load_images() self.update_image() def load_images(self): for file_name in os.listdir(self.folder_path): if file_name.lower().endswith((".jpg", ".jpeg", ".png", ".gif", ".bmp")): file_path = os.path.join(self.folder_path, file_name) self.image_dict[file_name] = file_path current_image = list(self.image_dict.keys())[0] def update_image(self): if self.current_image is not None: pixmap = QPixmap(self.image_dict[self.current_image]) self.image_label.setPixmap(pixmap.scaled(self.width() - self.tree_view.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) def tree_item_double_clicked(self, index): file_name = self.model.fileName(index) if file_name in self.image_dict: self.current_image = file_name self.update_image() def keyPressEvent(self, event): if event.key() == Qt.Key_A: self.previous_image() elif event.key() == Qt.Key_D: self.next_image() elif event.key() in [Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_4, Qt.Key_5]: self.save_text_file(event.key() - Qt.Key_0) def previous_image(self): if self.current_image is not None: file_names = list(self.image_dict.keys()) current_index = file_names.index(self.current_image) if current_index > 0: self.current_image = file_names[current_index - 1] else: self.current_image = file_names[-1] self.update_image() def next_image(self): if self.current_image is not None: file_names = list(self.image_dict.keys()) current_index = file_names.index(self.current_image) if current_index < len(file_names) - 1: self.current_image = file_names[current_index + 1] else: self.current_image = file_names[0] self.update_image() def save_text_file(self, number): if self.current_image is not None: file_name = self.current_image txt_file_path = os.path.join(self.folder_path, os.path.splitext(file_name)[0] + ".txt") with open(txt_file_path, "w") as file: file.write(str(number)) if name == "main": import sys app = QApplication(sys.argv) viewer = ImageViewer("D:/图片/wallpaper") viewer.show() sys.exit(app.exec_())这份代码实现不了使用键盘的A键向上翻页以及D键向下翻页,也实现不了键盘数字键生成相应txt文档,帮我分析一下错在哪里

2023-06-07 上传

import FreeCAD import FreeCADGui from PySide import QtGui, QtCore Gui.activateWorkbench("PartWorkbench") FreeCAD.newDocument() class SphereDialog(QtGui.QDialog): def __init__(self): super().__init__() self.setWindowTitle("Create Sphere") self.create_widgets() def create_widgets(self): layout = QtGui.QVBoxLayout() # Radius widget radius_label = QtGui.QLabel("Radius:") self.radius_spinbox = QtGui.QDoubleSpinBox() self.radius_spinbox.setMinimum(0.1) self.radius_spinbox.setMaximum(1000.0) self.radius_spinbox.setValue(10.0) layout.addWidget(radius_label) layout.addWidget(self.radius_spinbox) # Opacity widget opacity_label = QtGui.QLabel("Opacity:") self.opacity_slider = QtGui.QSlider(QtCore.Qt.Horizontal) self.opacity_slider.setMinimum(0) self.opacity_slider.setMaximum(100) self.opacity_slider.setValue(50) layout.addWidget(opacity_label) layout.addWidget(self.opacity_slider) # Create button create_button = QtGui.QPushButton("Create") create_button.clicked.connect(self.create_sphere) layout.addWidget(create_button) self.setLayout(layout) def create_sphere(self): # Get sphere parameters radius = self.radius_spinbox.value() opacity = float(self.opacity_slider.value() / 100) # Create sphere sphere = FreeCAD.ActiveDocument.addObject("Part::Sphere", "Sphere") sphere.Radius = radius sphere.ViewObject.Transparency = int(round(opacity * 100)) # Show in 3D view sphere.ViewObject.Visibility = True FreeCADGui.SendMsgToActiveView("ViewFit") FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(sphere) FreeCADGui.SendMsgToActiveView("ViewFit") # Close dialog self.close() dialog = SphereDialog() dialog.show()代码中执行没有球体出现,请修改代码

2023-05-30 上传