Qt基本概念

Posted 尚墨1111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt基本概念相关的知识,希望对你有一定的参考价值。

PyQt5是一套Python绑定Digia QT5应用的框架。Qt库是最强大的GUI库之一.

一、基本了解

|-- 概念
PyQt5:PyQt5是一套Python绑定Digia QT5应用的框架。Qt库是最强大的GUI库之一.
PyQt5-tools:PyQt5中没有提供常用的Qt工具,比如图形界面开发工具Qt Designer,PyQt5-tools中包含了一系列常用工具。
Qt Designer:编写UI界面,
PyUIC:将Qt Designer生成的.ui文件可以转换成.py文件。
PyRcc:在Qt Designer中使用的图片等资源需要将其编译为py文件,这时需要用到PyRcc工具方便地将qrc文件转换为py文件。

参考:https://blog.csdn.net/qq_32892383/article/details/108867482
其中exe文件不在qttool中:
参考:选择错误uic.exe会导致编译出来的代码有误,此时我们确定输入的是pyuic5.exe这个包,我的位置在 D:\\anaconda\\Scripts 中

|-- Python 语言开发跨平台的图形界面的程序,主要有3种选择:

    Tkinter:基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。

    wxPython:基于wxWidgets的Python库,优点是控件比较丰富,缺点是稳定性相对差点、文档少、用户少。

    PySide2、PyQt5:基于Qt 的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多。缺点是 库比较大,发布出来的程序比较大
     PySide2 是Qt的 亲儿子,18年才推出 , PyQt5 是Qt还没有亲儿子之前的收的义子 ,两者相差非常小

|-- 基本结构
QApplication 提供了整个图形界面程序的底层管理功能,比如:初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等
所以,我们必须在任何界面控件对象创建前,先创建它。
app = QApplication([])
window = QMainWindow()

|-- QtWidgets 控件基类对象,以下都是子类,控件都有父控件
    QMainWindow 界面的主窗口控件类
    QPlainTextEdit 文本框控件类
    QDialog 对话框
    QPushButton 按钮控件类
    QTextBrowser 是只能查看文本控件。
    QLabel 就是常见的标签
    QComboBox 是组合选择框,
    QListWidget 是列表控件
    QTableWidget 是表格控件
    QTableWidgetItem 单元格对象
    QRadioButton 是单选按钮
    QCheckBox 是勾选按钮
    QProgressBar 是进度条
    QSpinBox 是数字输入框
    QFileDialog 类可以用来选择文件或者目录
    QTreeWidget 树控件 
    QTreeWidgetItem 树节点控件
    QMessageBox 类可以用来弹出各种提示框
    QInputDialog 输入对话框
    Qt Style Sheet 定义界面显示样式的方法,称之为  

|--放在主窗口的控件,要能全部显示在界面上, 必须加上下面这行代码
    window.show()
|---进入QApplication的事件处理循环,接收用户的输入事件,分配给相应的对象处理
    app.exec_()
|-- 退出程序
    sys.exit(),详情参考:https://www.pynote.net/archives/1036
    
    app.exec_()的作用是运行主循环,必须调用此函数才能开始事件处理,调用该方法进入程序的主循环直到调用exit()结束。主事件循环从窗口系统接收事件,并将其分派给应用程序小部件。如果没有该方法,那么在运行的时候还没有进入程序的主循环就直接结束了,所以运行的时候窗口会闪退。
    
    不用sys.exit(app.exec_()),只使用app.exec_(),程序也可以正常运行,但是关闭窗口后进程却不会退出。


|- 附录python 语法
class Student(object):(Object)表示该类从哪个类继承下来的
创建实例:student = Student()
构造函数,强制初始化传入初始值:def __init__(self, name, score):
第一个参数self,表示创建的类实例本身,在属性前面加_表示实例为私有属性
所有其他定义的方法里面都应该加上 self参数

|--界面布局 Layout,主窗口缩放, 界面里面的控件、控件之间的距离也相应的进行缩放
    QHBoxLayout 水平布局
    QVBoxLayout 垂直布局
    QGridLayout 表格布局
    QFormLayout 表单布局
    sizePolicy 调整layout中控件的大小比例
    padding 和 margin 来调整间距
    horizontal 和 spacer 左右间距

|-- signal 相当于触发 和 slot  相当于响应
    信号灯就是发送信号的对象,绿灯亮是它发送的信号 (signal)
    汽车是接收对象,汽车行驶是汽车对信号的响应,也叫槽 (slot)。
    btn.clicked.connect(slotBtnClicked 槽,对应的操作),信号连接槽

    qt5中实现信号与槽的三种方式:【https://www.jb51.net/article/182113.htm】
     1. 第一种:内置信号与槽的使用
        btn.clicked.connect(showMsg)

    第二种:自定义信号与槽的使用
        #实例化信号对象
        send=QTypeSignal()
        #实例化槽对象
        slot=QTypeSlot()
        send.sendmsg(生成信号).connect(slot.get自定义的槽函数)

    第三种:装饰器的信号与槽的使用
        @PyQt5.QtCore.pyqtSlot(参数)
        def on_发送者对象名称_发射信号名称(self,参数):
            pass
        注意点:使用装饰器必须定义两个东西
            1.设置通过名字连接槽函数 connectSlotsByName(self)
                QtCore.QMetaObject.connectSlotsByName(Dialog)
            2.给需要绑定事件的定义一个id(self.btn.setObjectName('名称'))
                self.doubleSpinBox_tp.setObjectName("doubleSpinBox_tp")
            3.使用:动作开始的对象被触发时使用这个槽函数
                on_action_startRun_triggered(self)

|-- qrc里面的图片资源,要从与qrc同级的目录开始写

以上是关于Qt基本概念的主要内容,如果未能解决你的问题,请参考以下文章

QT 数据库学习笔记数据库基本概念

QT 数据库学习笔记数据库基本概念

QT 数据库学习笔记数据库基本概念

Qt模型/视图和QTableView的基本概念

Qt 5.3 下OpenCV 2.4.11 开发图像处理基本概念

如何使用 QObject 派生类实例遵循 OOP 基本概念?