QT基础

基础

学习 Qt 界面编程,本质上就是学习 Qt 各个控件的用法以及对 Qt 事件的处理。

Qt Creator 提供了很强大的 Qt GUI 开发手册,很容易就能查到某个控件类中包含哪些信号函数和槽函数。举个例子,查看 QPushButton 类中信号函数和槽函数的过程是:在程序中引入头文件,双击选中“QPushButton”并按 "Fn+F1" 快捷键,就会弹出 QPushButton 类的使用手册。

.pro为项目管理文件或者工程管理文件(简称 pro 文件)。

信号和槽

信号和槽是 Qt 特有的消息传输机制,它能将相互独立的控件关联起来。

Qt 中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号。对于接收到的每个信号,控件都会做出相应的响应动作。在 Qt 中,对信号做出的响应动作就称为槽。

信号和槽机制底层是通过函数间的相互调用实现的。每个信号都可以用函数来表示,称为信号函数;每个槽也可以用函数表示,称为槽函数。例如,“按钮被按下”这个信号可以用 clicked() 函数表示,“窗口关闭”这个槽可以用 close() 函数表示,信号和槽机制实现“点击按钮会关闭窗口”的功能,其实就是 clicked() 函数调用 close() 函数的效果。

信号函数和槽函数通常位于某个类中,和普通的成员函数相比,它们的特别之处在于:
信号函数用 signals 关键字修饰,槽函数用 public slots、protected slots 或者 private slots 修饰。signals 和 slots 是 Qt 在 C++ 的基础上扩展的关键字,专门用来指明信号函数和槽函数;
信号函数只需要声明,不需要定义(实现),而槽函数需要定义(实现)。

注意,并非所有的控件之间都能通过信号和槽关联起来,信号和槽机制只适用于满足以下条件的控件:

  • 控件类必须直接或者间接继承自 QObject 类。Qt 提供的控件类都满足这一条件。
  • 控件类中必须包含 private 属性的 Q_OBJECT 宏。

将某个信号函数和某个槽函数关联起来,需要借助 QObject 类提供的 connect() 函数。connect() 是 QObject 类中的一个静态成员函数,专门用来关联指定的信号函数和槽函数。

QObject::connect(const QObject *sender, PointerToMemberFunction signal, 
    const QObject *receiver, PointerToMemberFunction method, 
    Qt::ConnectionType type = Qt::AutoConnection);
    
connect(&Btn, &QPushButton::clicked, &widget, &QWidget::close);

一个 connect() 函数只能关联一个信号函数和一个槽函数,程序中可以包含多个 connect() 函数,能实现以下几种效果:

  • 关联多个信号函数和多个槽函数;
  • 一个信号函数可以关联多个槽函数,当信号发出时,与之关联的槽函数会一个接一个地执行,但它们执行的顺序是随机的,无法人为指定哪个先执行、哪个后执行;
  • 多个信号函数可以关联同一个槽函数,无论哪个信号发出,槽函数都会执行。

此外,connect() 函数的 method 参数还可以指定一个信号函数,也就是说,信号之间也可以相互关联,这样当信号发出时,会随之发出另一个信号。

问题

  1. QT 'variable has incomplete type' and 'forward declaration of 'Qxxx' ' issues ...

Help=>Abaout Plugins-> C++ ->ClangCodeModel 关闭复选 后 重新启动QTCreator

  1. more

python开发

PyQT5 快速掌握PyQt5 - 知乎

PySide2 Pyside2 GUI开发笔记 官网

PySide2和PyQt5同样对应的Qt5框架,PyQt甚至要比PySide出现更早,社区更完备、中文文档更丰富。PyQt采用的是GPLv3许可证和需要购买版权的商业许可证发布的,PySide采用的是LGPL协议,对开发者商用的要求相对宽松一下。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside

1)打开Qt Designer工具,创建窗口,初步设计界面和简单逻辑。
2)搜集图像、音频等,添加到.qrc资源文件内。
3)编写qss样式,进一步美化界面,保存成.qss文件。
4).ui文件转.py文件(动态加载UI的忽略)和.qrc文件转.py文件。
5)另建.py文件,创建类加载UI界面,导入.qrc生成的.py文件。
6)编写类的成员函数,逐一实现复杂逻辑。
7)另建.py文件,在main函数中组建各代码模块。
8)使用pyinstaller、py2exe等工具对代码进行打包。

参考

  1. QT系列 - csdn
  2. ROS与QT语言入门教程-目录
  3. Qt学习之路2-kanyun
  4. qt5官方demo学习-kanyun
  5. Qt5编程入门教程-c语言中文网
  6. Qt 快速入门系列教程-qt4-qt5
posted @ 2015-08-02 18:29  yuxi_o  阅读(658)  评论(0编辑  收藏  举报