iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何进行Qt 信号自定义槽函数的实现
  • 171
分享到

如何进行Qt 信号自定义槽函数的实现

2023-06-21 20:06:06 171人浏览 八月长安
摘要

本篇文章为大家展示了如何进行Qt 信号自定义槽函数的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,如下

本篇文章为大家展示了如何进行Qt 信号自定义槽函数的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,如下我们以老师学生为例子简单学习一下信号与槽函数的使用方法。

使用无参数信号与槽

首先定义一个teacher类,该类中用于发送一个信号,其次student类,定义用于接收该信号的槽函数,最后在widget中使用emit触发信号,当老师说下课时,学生请客吃饭。

teacher.h 中只需要定义信号。定义一个 void hungry(); 信号。

#ifndef TEACHER_H#define TEACHER_H#include <QObject>class Teacher : public QObject{    Q_OBJECTpublic:    explicit Teacher(QObject *parent = nullptr);signals:    // 定义一个信号,信号必须为void类型,且信号不能实现    void hungry();};#endif // TEACHER_H

student中需要定义槽声明,并实现槽。

student.h

#ifndef STUDENT_H#define STUDENT_H#include <QObject>class Student : public QObject{    Q_OBJECTpublic:    explicit Student(QObject *parent = nullptr);signals:public slots:    // 自定义槽函数    // 槽函数必须定义且必须要声明才可以使用    void treat();};#endif // STUDENT_H

student.cpp

#include "student.h"#include <QDebug>Student::Student(QObject *parent) : QObject(parent){}// 槽函数的实现过程如下void Student::treat(){    qDebug() << "请老师吃饭";}

Widget.h定义信号发送函数,与类

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include "student.h"#include "teacher.h"class Widget : public QWidget{    Q_OBJECTpublic:    Widget(QWidget *parent = nullptr);    ~Widget();    // 定义学生与老师类    Teacher *zt;    Student *st;    // 定义信号发送函数    void classIsOver();};#endif // WIDGET_H

Widget.cpp 具体实现

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent){    zt = new Teacher(this);    st = new Student(this);    // zt向st发送信号,信号是&Teacher::hungry 处理槽函数是 &Student::treat    connect(zt,&Teacher::hungry,st,&Student::treat);    classIsOver();}Widget::~Widget(){}// 触发信号void Widget::classIsOver(){    emit zt->hungry();}

使用有参信号传递

只需要再无参基础上改进

widget.cpp

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent){    zt = new Teacher(this);    st = new Student(this);    void(Teacher:: *teacherPtr)(QString) = &Teacher::hungry;    void(Student:: *studentPtr)(QString) = &Student::treat;    connect(zt,teacherPtr,st,studentPtr);    classIsOver();}Widget::~Widget(){}// 触发信号void Widget::classIsOver(){    emit zt->hungry("kao'leng'mian烤冷面");}

student.cpp

#include "student.h"#include <QDebug>Student::Student(QObject *parent) : QObject(parent){}// 槽函数的实现过程如下void Student::treat(){    qDebug() << "请老师吃饭";}void Student::treat(QString foodName){    qDebug() << "请老师吃饭了!,老师要吃:" << foodName.toUtf8().data() ;}

student.h

#ifndef STUDENT_H#define STUDENT_H#include <QObject>class Student : public QObject{    Q_OBJECTpublic:    explicit Student(QObject *parent = nullptr);signals:public slots:    // 自定义槽函数    // 槽函数必须定义且必须要声明才可以使用    void treat();    void treat(QString);};#endif // STUDENT_H

teacher.h

#ifndef TEACHER_H#define TEACHER_H#include <QObject>class Teacher : public QObject{    Q_OBJECTpublic:    explicit Teacher(QObject *parent = nullptr);signals:    // 定义一个信号,信号必须为void类型,且信号不能实现    void hungry();    void hungry( QString foodName );};#endif // TEACHER_H

widget.h

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QString>#include <QPushButton>#include "student.h"#include "teacher.h"class Widget : public QWidget{    Q_OBJECTpublic:    Widget(QWidget *parent = nullptr);    ~Widget();    // 定义学生与老师类    Teacher *zt;    Student *st;    // 定义信号发送函数    void classIsOver();};#endif // WIDGET_H

点击按钮触发信号

当我们点击按钮时,自动触发信号。只需需改widget中的内容。

Widget::Widget(QWidget *parent): QWidget(parent){    st = new Student(this);    tt = new Teacher(this);    QPushButton *btn = new QPushButton("发送邮件",this);    void(Teacher:: *teacherPtr)(void) = &Teacher::send_mail;    void(Student:: *studentPtr)(void) = &Student::read_mail;    // 将btn绑定到button上,点击后触发tt 里面的teacherPtr -> 产生信号send_mail;    connect(btn,&QPushButton::clicked,tt,teacherPtr);    // 接着将产生信号绑定到 st 里面的student -> 也就是read_mail槽函数上。    connect(tt,teacherPtr,st,studentPtr);}

匿名函数与槽

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){    ui->setupUi(this);    // 使用Lambda表达式,其中的[=] 对文件内的变量生效,其中[btn]则是对btn按钮生效    // 默认会调用一次完成初始化,这是由()决定的函数调用。    [=](){        this->setWindowTitle("初始化..");    }();    // 使用mutable可以改变通过值传递的变量    int number = 10;    QPushButton *btn_ptr1 = new QPushButton("改变变量值",this);    btn_ptr1->move(100,100);    // 点击按钮改变内部变量的值,由于值传递所以不会影响外部变量的变化    connect(btn_ptr1,&QPushButton::clicked,this,[=]()mutable{       number = number + 100;       std::cout << "inner: " << number << std::endl;    });    // 当点击以下按钮时number还是原值    QPushButton *btn_ptr2 = new QPushButton("测试值传递",this);    btn_ptr2->move(100,200);    connect(btn_ptr2,&QPushButton::clicked,this,[=](){       std::cout << "The Value: " << number << std::endl;    });    // 使用Lambda表达式返回值,有时存在返回的情况    int ref = []()->int{        return 1000;    }();    std::cout << "Return = " << ref << std::endl;}

上述内容就是如何进行Qt 信号自定义槽函数的实现,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何进行Qt 信号自定义槽函数的实现

本文链接: https://www.lsjlt.com/news/300610.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行Qt 信号自定义槽函数的实现
    本篇文章为大家展示了如何进行Qt 信号自定义槽函数的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,如下...
    99+
    2023-06-21
  • Qt信号自定义槽函数的实现
    目录使用无参数信号与槽使用有参信号传递点击按钮触发信号匿名函数与槽Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,如下我们以老师学生为例子简单学习一...
    99+
    2024-04-02
  • QT如何找到信号连接的槽函数
    在Qt中,可以通过以下几种方式找到信号连接的槽函数:1. 使用QObject的`findChild()`方法:该方法可以通过对象名称...
    99+
    2023-09-27
    QT
  • qt发送信号后槽函数没有执行如何解决
    如果在Qt中发送信号后槽函数没有执行,可能是以下几个原因:1. 检查信号和槽函数的连接方式是否正确。确保使用`QObject::co...
    99+
    2023-09-27
    qt
  • Qt开发如何实现跨窗口信号槽通信
    这篇文章主要介绍“Qt开发如何实现跨窗口信号槽通信”,在日常操作中,相信很多人在Qt开发如何实现跨窗口信号槽通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Qt开发如何实现跨窗口信号槽通信”的疑惑有所帮助!...
    99+
    2023-06-22
  • 使用自定义golang函数实现进行代码重构
    通过使用自定义函数,代码重构可以在 go 中实现。这些函数允许我们定义特定功能并多次重复使用它们。自定义函数提高了可读性、减少了重复,并提高了可维护性和模块性。 使用自定义 Go 函数...
    99+
    2024-04-27
    golang
  • 如何在golang中自定义实现函数?
    在 go 中实现自定义函数,需要使用 func 关键字后跟函数名、参数列表和返回类型(可选)。通过调用函数名和提供适当参数即可调用自定义函数。自定义函数可用于各种任务,例如处理数据、格式...
    99+
    2024-04-28
    函数 golang iphone 格式化输出 标准库
  • PaddlePaddle中如何实现自定义的损失函数
    在PaddlePaddle中实现自定义的损失函数,可以通过继承paddle.nn.Layer类并重载__call__方法来实现。以下...
    99+
    2024-04-02
  • 如何用自定义函数进行Python发送电子邮件
    这篇文章给大家介绍如何用自定义函数进行Python发送电子邮件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。大概是在一个多月前,有个朋友问我如何使用Python发送邮件,说心里话这方面的操作在我之前的工作履历中真的没有...
    99+
    2023-06-02
  • QT中如何实现自定义quick-Popup弹出窗口
    小编给大家分享一下QT中如何实现自定义quick-Popup弹出窗口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.Popup介绍Popup是一个弹出窗口的控件...
    99+
    2023-06-20
  • 如何用Shell实现数学运算自定义函数
    本篇内容介绍了“如何用Shell实现数学运算自定义函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最近脚本中总是需要计算,每次都用awk会...
    99+
    2023-06-09
  • QT如何自定义QTextEdit实现大数据的实时刷新显示功能
    这篇“QT如何自定义QTextEdit实现大数据的实时刷新显示功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“QT如何自定...
    99+
    2023-06-30
  • 如何测试和调试自定义的golang函数实现
    单元测试自定义函数涉及创建测试文件、定义测试函数、编写测试用例和执行断言。调试失败的测试涉及启用调试信息、使用调试器和设置断点。 如何测试和调试自定义 Go 函数实现 在 Go 中,测...
    99+
    2024-04-26
    调试 golang
  • Qt如何编写自定义控件实现抽奖转盘
    本文小编为大家详细介绍“Qt如何编写自定义控件实现抽奖转盘”,内容详细,步骤清晰,细节处理妥当,希望这篇“Qt如何编写自定义控件实现抽奖转盘”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体代码如下#ifndef...
    99+
    2023-07-02
  • PHP扩展开发:如何通过宏定义自定义函数的行为?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • python如何实现信号与槽的断开与连接
    这篇文章主要介绍了python如何实现信号与槽的断开与连接,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。信号与槽的断开与连接有时候基于某些原...
    99+
    2024-04-02
  • JavaScript如何实现函数重定义
    这篇文章主要介绍JavaScript如何实现函数重定义,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数重定义这是一种最基本也是最常用的代码反调试技术了。在JavaScript中,我们可以对用于收集信息的函数进行重定...
    99+
    2023-06-27
  • PHP 编程指南:如何自定义实现 intval 函数
    在PHP编程中,我们经常会使用到intval函数来将一个变量转换为整数值。虽然PHP提供了这个内置函数来实现这一功能,但有时候我们也可以根据自己的需求来自定义实现intval函数。本文...
    99+
    2024-03-11
    php 自定义 intval
  • 微信小程序如何实现自定义Toast
    这篇文章主要介绍微信小程序如何实现自定义Toast,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序 自定义Toast实例代码Toast样式可以根据需求自定义,本例中是圆形&l...
    99+
    2024-04-02
  • Hive如何自定义函数实现创建临时函数和永久函数
    小编给大家分享一下Hive如何自定义函数实现创建临时函数和永久函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 先创建函数类文件   &n...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作