Qt(一)概念 信号与槽

一、概念

Qt是一个跨平台基于C++图形用户界面应用程序开发框架

(一)Qt工具

1. Assistant:帮助手册

在这里插入图片描述

2. Designer:Qt设计师

通过设计师生成的文件的后缀名为xxx.ui
在这里插入图片描述

3. xxx.uic文件

将ui界面编译成C++的文件格式

4. rcc资源文件

5. moc:元对象编译器

信号和槽

6. qmake

xxx.pro文件生成

7. Qtcreator:集成化的开发软件

(二)创建第一个Qt程序

1. 参考文档

2. 影子构建

3. xxx.pro

4. main.cpp

5. xxx.h

6. xxx.cpp

(三)工程文件说明

(四)Qt标准类

QObject:这是Qt中所有对象的基类。Qt中的很多类都继承自QObject,以利用Qt的信号与槽机制、对象树和属性系统等特性。

QWidget:它是Qt中所有用户界面对象的基类。QWidget提供了用户界面的基本功能,如大小、位置、字体和样式等。QWidget继承自QObject,因此它可以使用Qt的信号与槽机制等特性。

QFrame:它是QWidget的一个子类,专门用于提供一个带有边框和可选背景的框架。QFrame继承了QWidget的所有功能,并增加了边框和背景相关的属性。

二、 信号和槽机制

信号和槽机制是一种手段,是一种通信机制,发生子两个组件或者两个组件以上的通信;
信号和槽本质上就是函数,因此可以称为信号函数和槽函数

可以使用提供的信号函数和槽函数,也可以使用自定义的信号函数和槽函数
提供的信号函数通过‘转到槽’进行选择即可,但是提供的槽函数需要自定义;

(一)使用

信号/槽机制在QObject类中实现
QWidget 是Qt中所有用户界面对象的基类,它本身继承自 QObject 类。而 QObject 类是Qt对象模型的核心,它提供了对象树、事件处理、属性系统、对象间通信(包括信号和槽)等核心功能

1. 设计界面

  1. 需求:有两个按钮,一个按钮负责关闭label控件,另一个负责关闭父窗口
  2. 将需要的组件拖到工作区
  3. 修改要修改的组件属性:
    修改组件objectName、文本、字体和大小
    修改父窗口大小
    修改标题windowTitle
  4. 布局(美观)

2. 使用提供的信号函数和槽函数

(1)

第一步:设计界面下方
在这里插入图片描述

第二步:添加信号和槽

(2)通过函数实现

(二)自定义信号和槽

1. 自定义信号和槽

  1. 自定义信号函数
    自定义的信号函数只有声明,没有定义
    emit 自定义的信号函数

  2. 自定义槽函数
    自定义的槽函数既要声明也要定义

返回值类型 
  1. 用于信号函数和槽函数连接:connect

  1. 用于信号函数和槽函数断开:disconnect
[static]

2. 使用示例


  • 注:

(三)信号函数与槽函数总结

1.信号函数和槽函数的形参类型和个数要求一致(使用比较多)
  QObject::connect(发送者,SIGNAL(on_custom_signals()),接收者,SLOT(on_custom_slot()));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int)));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals(int,char)),接收者,SLOT(on_custom_slot(int,char)));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals(int,char)),接收者,SLOT(on_custom_slot(char,char)));  //error
  
2.信号函数的参数个数可以比槽函数的形参个数多(使用比较少)
   QObject::connect(发送者,SIGNAL(on_custom_signals(int,int)),接收者,SLOT(on_custom_slot(int)));  //ok
   QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int,int)));  //error
    
3.槽函数的形参个数一般不可以比信号函数多
  如果槽函数的形参个数比信号函数的形参个数多,可以给槽函数的形参添加缺省值
  QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int,int)));  //error
  //想要上面的连接函数成立的话,必须要给槽函数的形参添加缺省值
  QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int,int = 缺省值)));  //ok
  
4.一个信号函数可以对应多个槽函数(使用比较多)
  QObject::connect(发送者,SIGNAL(on_custom_signals()),接收者,SLOT(on_custom_slot1()));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals()),接收者,SLOT(on_custom_slot2()));  //ok
5.多个信号函数可以对应同一个槽函数(使用比较多)
  QObject::connect(发送者,SIGNAL(on_custom_signals1()),接收者,SLOT(on_custom_slot()));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals2()),接收者,SLOT(on_custom_slot()));  //ok
  • 注:
  • 当连接信号和槽时,它们的参数列表(包括参数的数量、类型和顺序)必须兼容。槽函数的参数类型必须能够接收信号发送的数据类型,或者信号发送的数据类型可以被隐式转换为槽函数期望的参数类型
  • 在Qt框架中,当对象的状态发生变化时,它可以通过发送信号来通知其他可能对此变化感兴趣的对象。发送信号的对象(称为信号的发射者)并不关心是否有其他对象接收(或监听)这个信号,也不关心有多少个对象接收了这个信号。

相关推荐

  1. qt-信号

    2024-07-11 02:10:04       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 02:10:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 02:10:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 02:10:04       58 阅读
  4. Python语言-面向对象

    2024-07-11 02:10:04       69 阅读

热门阅读

  1. 无题:天选之子?

    2024-07-11 02:10:04       24 阅读
  2. Flutter——最详细(GestureDetector)使用教程

    2024-07-11 02:10:04       24 阅读
  3. Jenkins构建python项目

    2024-07-11 02:10:04       20 阅读
  4. 使用nodejs进行截图

    2024-07-11 02:10:04       19 阅读
  5. nginx部署vue项目

    2024-07-11 02:10:04       24 阅读
  6. 【网络】SCTP协议概念

    2024-07-11 02:10:04       27 阅读
  7. Git 完整的提交规范教程

    2024-07-11 02:10:04       21 阅读
  8. 【Zoom安全解析】深入Zoom的端到端加密机制

    2024-07-11 02:10:04       23 阅读