Qt信号与槽知识点总结归纳

目录
  • 一.含义与使用
    • (一).含义
    • (二).connect使用
    • (三).信号函数
    • (四).槽函数
  • 二.示例
  • 总结

一.含义与使用

(一).含义

信号与槽是qt中一种常用的通信手段。发送方发送信号,接收方通过槽进行接收并完成具体任务。

简单来讲,就是通过发送一个函数(信号),接收方通过另一个函数(槽)完成任务。

(二).connect使用

用法上,通过connect函数进行连接。

connect(发送方地址,信号函数,接收方地址,槽函数);

比如我们举如下例子:

通过点击按钮实现关闭窗口。

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::myWidget)
{
    ui->setupUi(this);
    but = new QPushButton("close", this);
    but->move(200, 200);
    //将按钮clicked信号函数与QWidget类的close槽函数连接
    connect(but, &QPushButton::clicked, this, &QWidget::close);
}

当我们进行点击窗口操作时,执行clicked函数进而触发close关闭窗口。

如果使用的信号函数或槽函数有重载情况,那么这样直接通过地址传函数就 不可能了,因为无法区别参数。

此时需要使用函数指针完成指定重载版本的调用。

举例如下:

A* pa = new A;
B* pb = new B;
void(A::*APtr)(QString) = &A::funcA;
void(B::*BPtr)(QString) = &B::funcB;
//指定调用参数为QString的重载版本
connect(pa, APtr, pb, BPtr);

在使用connect时有几点需要注意:

1.信号函数与槽函数的参数类型必须匹配,且信号函数参数个数可以比槽函数多,但绝对不能少。

2.一个信号函数可以连接多个槽函数

3.多个信号函数可以连接同一个槽函数

QT4之下的版本不支持这种connect形式,只能通过如下形式使用:

connect( 发送方地址,SIGNAL( 信号函数(参数) ),接收方地址,SLOT( 槽函数(参数) ) );

SIGNAL和SLOT是宏,编译时会将信号函数和槽函数用字符串替换,并且不会判断参数是否相互匹配,因此只要不是Qt版本问题,并不推荐使用这种方式。

使用disconnect可以断开信号与槽的连接,参数与connect一致。

(三).信号函数

如果我们自定义信号函数,有几点需要注意:

1.信号函数需要使用signals关键字声明

class A : public QObject
{
    Q_OBJECT
public:
    explicit A(QObject *parent = nullptr);

signals://以下均为信号函数
    void funcA();
    void funcA(QString str);
};

2.信号函数不能定义,只用声明即可。

3.返回值为void

4.可带参数,可重载

5.可以使用emit关键字主动释放信号触发槽函数。

void test{
    emit A()->funcA();//使用无参版本
}

(四).槽函数

自定义槽函数也有几点需要注意:

1.可声明为类的任意成员函数(一般为public),较早版本必须在public slots关键字下声明。

2.返回类型为void

3.可带参数,可重载

4.可以使用lambda表达式替换

二.示例

我们写一个程序,按钮按下时打开一个窗口同时按钮显示“close”,再次按下关闭窗口按钮变成“open”。

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::myWidget)
{
    ui->setupUi(this);
    //设置窗口
    setFixedSize(500, 500);
    //设置按钮
    but = new QPushButton("open", this);
    but->move(200, 200);
    but->setCheckable(true);//如果使用toggled必须先使用该函数,clicked亦可。

    mw = new QWidget;//窗口
    mw->setWindowTitle("Gap");//窗口名
    //使用lambda表达式代替槽函数
    connect(but, &QPushButton::toggled, this, [&]()mutable{
        if(but->text() == "open"){
            mw->show();
            but->setText("close");

        }
        else{
            mw->close();
            but->setText("open");

        }
    });

    //定义一个按钮end,按下直接关闭myWidget窗口退出程序
    QPushButton* end = new QPushButton("end", this);
    but->move(100, 200);
    connect(end, &QPushButton::clicked, this, &QWidget::close);
}

总结

到此这篇关于Qt信号与槽知识点总结归纳的文章就介绍到这了,更多相关Qt信号与槽内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 深入理解Qt信号槽机制

    目录 1. 信号和槽概述 1.1 信号的本质 1.2 槽的本质 1.3 信号和槽的关系 1. 信号和槽概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式(发布-订阅模式).当某个`事件`发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal).这种发出是没有目的的,类似广播.如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号.也就是说,当信号发出时,被连

  • Qt 信号自定义槽函数的实现

    目录 使用无参数信号与槽 使用有参信号传递 点击按钮触发信号 匿名函数与槽 Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,如下我们以老师学生为例子简单学习一下信号与槽函数的使用方法. 使用无参数信号与槽 首先定义一个teacher类,该类中用于发送一个信号,其次student类,定义用于接收该信号的槽函数,最后在widget中使用emit触发信号,当老师说下课时,学生请客吃饭. teacher.h 中只需要定义信号.定义一个 void hungry(); 信号

  • Qt开发实现跨窗口信号槽通信

    多窗口通信,如果是窗口类对象之间互相包含,则可以直接开放public接口调用,不过,很多情况下主窗口和子窗口之间要做到异步消息通信,就必须依赖到跨窗口的信号槽,以下是一个简单的示例. 母窗口 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #include <QString> class MainWindow : public

  • c++ Qt信号槽原理

    1.说明 使用Qt已经好几年了,一直以为自己懂Qt,熟悉Qt,使用起来很是熟练,无论什么项目,都喜欢用Qt编写.但真正去看Qt的源码,去理解Qt的思想也就近两年的事. 本次就着重介绍一下Qt的核心功能--信号槽机制,相信接触过Qt的人都能很熟悉地使用,甚至,大部分人还能轻松地说出信息槽的几种用法.但是信号槽的核心可不是简单说说就能说清楚的. 那么,本次,就从Qt的源码中讲解一下信号槽的机制. 其实,直到写这篇文章,我也没有完全看明白相关的源码,只是明白了其中的大部分以及使用机制,其中还有很多细节

  • Qt信号与槽知识点总结归纳

    目录 一.含义与使用 (一).含义 (二).connect使用 (三).信号函数 (四).槽函数 二.示例 总结 一.含义与使用 (一).含义 信号与槽是qt中一种常用的通信手段.发送方发送信号,接收方通过槽进行接收并完成具体任务. 简单来讲,就是通过发送一个函数(信号),接收方通过另一个函数(槽)完成任务. (二).connect使用 用法上,通过connect函数进行连接. connect(发送方地址,信号函数,接收方地址,槽函数); 比如我们举如下例子: 通过点击按钮实现关闭窗口. myW

  • 浅谈Qt信号与槽的各种连接方式

    目录 简介 连接信号槽 connect 函数的第五个参数 信号与槽的连接方式 简介 信号槽是 Qt 框架引以为豪的机制之一.当用户触发某个事件时,就会发出一个信号(signal),这种发出是没有目的的,类似广播.如果有对象对这个信号感兴趣,它就会连接(connect)绑定一个函数(称为槽slot)来处理这个信号.也就是说当信号发出时,被连接的槽函数会自动被回调.这有点类似与开发模式中的观察者模式,即当发生了感兴趣的事件,某一个操作就会被自动触发 信号和槽是Qt特有的信息传输机制,是Qt设计程序的

  • python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例

    在下面这3篇文章中我们给出了手工输入代码的信号与槽的使用方法,因为采用这种方法介绍时,会简单一些,如果使用Qt Designer来介绍这些功能,那么任何一个简单的功能都会使用xxxx.ui xxxx.py call_xxxx.py三个文件 来实现,这样内容会显得很乱 python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例 python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例 python GUI库图形界面开发之PyQt5信号与槽的高级

  • QT中删除信号于槽的连接的实现

    如果是在UI里建立的,那就在下面这个函数里删除连接槽函数的对应行 void MainForm::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { auto *_t = static_cast<MainForm *>(_o); Q_UNUSED(_t) switch (_id) { case 0: _t->

  • 浅谈pyqt5中信号与槽的认识

    一.介绍 信号(Signal)和槽(Slot)是Qt中的核心机制,也是PyQt变成中对象之间进行通信的机制 在pyqt5中,每一个QObject对象和pyqt中所有继承自QWidget的控件都支持信号和槽 当信号发射时,连接槽函数将会自动执行,pyqt5中信号与槽通过connect()函数连接起来的. 在pyqt5中信号主要分两类: 1.内置信号(详细参考各个组件) 2.自定义信号(主要用于组件之间数据的传递与窗口交互) 二.内置信号的简单介绍 使用connect()方法将信号与槽函数绑定在一起

  • PyQt5通信机制 信号与槽详解

     前言 信号和槽是PyQt编程对象之间进行通信的机制.每个继承自QWideget的控件都支持信号与槽机制.信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理).本文主要讲述信号和槽最基本.最经常使用方法.就是内置信号和槽的使用的使用方法. 内置信号和槽 所谓内置信号与槽的使用.是指在发射信号时,使用窗口控件的函数,而不是自定义的函数.信号与槽的连接方法是通过QObject.signal.connect将一个QObject的信号连接到另一个QObject的槽函数. 在任何GUI设计

  • python GUI库图形界面开发之PyQt5信号与槽基本操作

    信号与槽基本操作 进入Qt Designer,加入控件,本文以按钮为例. 按F4开始后,选择需要加入信号与槽的按钮,如下图所示该按钮会变红,按住鼠标拉出一条红线,若该按钮需控制旁边的label,则红线连接到label上(图1),若对框体(MainWindow)进行操作,则链接到框体上,会出现一个像物理中"地线"似的符号(图2). 图1 图2 连接后,会弹出如下窗体(图3),左侧界面选择信号,如下图中选择"clicked()"代表点击按钮触发右侧对应槽的操作. 勾选下

随机推荐