Qt里通过传递函数指针实现动态绑定信号/槽

2023-11-20

// test.h

#include <QObject>
 
class QTimer;
 
 
class Test:public QObject
{
Q_OBJECT
 
public:
    Test(QObject * parent = 0);
    ~Test();
 
 
    void startTimer(int interval);
 
    void connectQTimer(void(Test::*pf)());
 
 
public slots:
    void onTimeout();
 
    void onPrintOut();
 
 
private:
    QTimer *m_timer;
 
};
 
 
#endif // TEST

// test.cpp

#include <QTimer>
#include <QDebug>
#include "test.h"

 
 
Test::Test(QObject *parent)
    : QObject(parent)
{
    m_timer = new QTimer(this);
}
 
 
Test::~Test()
{
    m_timer->deleteLater();
    m_timer = NULL;
}
 
 
void Test::startTimer(int interval)
{
    m_timer->start(interval);
    //    timer->setSingleShot(true);
}
 
 
void Test::connectQTimer(void (Test::*pf)())
{
    connect(m_timer, &QTimer::timeout, this, pf);
 
 
    // 失败方法1
//    connect(m_timer, SIGNAL(timeout()),this, SLOT(pf));

 
    // 失败方法2
//    connect(m_timer, SIGNAL(timeout()),this, SLOT(*pf));

 
    // 失败方法3
//    connect(m_timer, SIGNAL(timeout()),this, SLOT((this->*pf)()));
}
 
 
void Test::onTimeout()
{
    qDebug()<<"onTimeout()called...\n";
}
 
 
void Test::onPrintOut()
{
    qDebug()<<"onPrintOut()called...\n";
}
 

// main.cpp

#include <QCoreApplication>
#include <QTimer>
#include "test.h"

 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    Test test;
 
    /*** 第一种方式传递函数指针 ***/
    test.connectQTimer(&Test::onTimeout);
    test.connectQTimer(&Test::onPrintOut);
 
 
 
    /*** 第二种方式传递函数指针 ***/
//    void(Test::*pf)() = &Test::onTimeout;
//    test.connectQTimer(pf);
 
//    void(Test::*pp)() = &Test::onPrintOut;
//    test.connectQTimer(pp);

 
    test.startTimer(5000);
 
 
    return a.exec();
}
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt里通过传递函数指针实现动态绑定信号/槽 的相关文章

  • 很详细的SpringBoot整合UEditor教程

    UEditor只提供JSP版本的后端入口代码 但提供了项目源码 因此可以根据业务需求修改源代码 此处使用了SpringBoot框架 配备了Thymeleaf模板引擎 所以没有必要再添加jsp来兼容UEditor 可通过修改源码满足需要 下面
  • zookeeper 系列(2) 启动流程

    虽然天天在看源码 但很久没有写博客了 从这周开始写点系列 不写文章 就整些流程图吧
  • 基于OpenCV细胞识别计数

    OpenCV提供了充分的对外接口 可以方便的进行图像识别 用到的函数有 cvSmooth 图像过滤 这里用到的是高斯平滑 void cvSmooth const CvArr src CvArr dst int smoothtype CV G
  • PyQt圆形按钮

    不规则形状的控件一直是图形界面设计的不可缺少的一项 但是有些控件的不规则实现却比较困难 这篇文字专注于圆形按钮的实现 此实现方法比较简单 没有任何难点 且看实现效果 按钮初始图片 Hovered图片 Pressed图片 当然 将图片设置为r
  • Sqli-labs 查看源代码 1-20

    Less 1 indexphp sqli connectphp db credsinc GET 基于错误 单引号 字符型 Less 2 GET 基于错误 整型 Less 3 基于错误 单引号变形 字符型 Less 4 基于错误 双引号 字符
  • c/c++编程日记:用C语言实现消消乐游戏(附源码)

    描述 给定一个矩阵 判断移动哪一个格子 可以实现消除 定义连续三个即可消除 分析 先写一个函数 判断包含 i j 的格子是否可能实现消除 然后就是向右向下交换 然后调用上面写好的函数判断 被交换的两个格子是否实现消除 重点 1 只需要向右向
  • 编译Linux内核生成Image和System.map文件

    p span style font family 华文楷体 font size 12pt background color rgb 255 255 255 一直想琢磨琢磨Linux内核 便开始看 Linux内核完全注释 可是发现一头雾水 所
  • Java socket通信实例,简单入门socket实例代码

    是不是看了许多socket入门知识 却还是不能实际运用呢 这篇文章通过利用简单实例程序讲解通过socket实现客户端与服务器之间的通讯 这篇文章可以让你不需要了解socket原理也能利用 便于应急 但建议之后要好好补补关于soket的基础知
  • zookeeper 系列(3) create 流程(1)

    create 流程主要是zkcli 里的create命令为入口 分析客户端解析命令 发送命令 服务端接收命令 解析命令 到以leader接收的prequestProcesser的流程 流程图片可能不太清楚 截图如下 解析流程 发送包装 发送
  • 89个android学习样例源码

    源码下载链接 https pan baidu com s 1uT hsZQac7Hz3pOxX466Cw pwd 8888 提取码 8888 Android 仿京东金融首页头像效果 Android 实现Conquer应用源码 Android
  • PHP发送邮件详细说明

    这两天琢磨了php得原生发送邮件 发现自带得mail方法不太好用 于是上网查询了好多方法 亲测以下方法能用 源代码都在 我的github 到github上下载 https github com PHPMailer PHPMailer htt
  • Caffe解惑:为什么Caffe里头有mutable_cpu_data和cpu_data

    一开始看代码的时候会纳闷 为啥caffe里头又一个 cpu data 还要有一个mutable cpu data 其实从字面就可以看出来这个mutable就是易变的意思啦 二话不说翻出源代码看看究竟有啥区别 const void Synce
  • LRC算法的Java实现

    项目中要用到 本来想拿来主义 结果没有找到合适的 所有自己写了一个 LRC具体算法如下 1 对需要校验的数据 2n个字符 两两组成一个16进制的数值求和 2 将模值按位取反 3 加1 Java代码实现 输入byte data 返回LRC校验
  • 最小二乘曲线拟合——C语言算法实现二

    最小二乘曲线拟合 在上一篇博客中我们介绍了最小二乘法的原理 以及代码实现的例子 http blog csdn net beijingmake209 article details 27565125 本次我们再给出一个程序实现的例子 编译环境
  • qemu-guest-agent windows下的监控开发

    windows下的qemu guest agent 简称qga 的名字叫做qemu guest agent win32 目前最新版的版本号是qemu guest agent win32 0 12 1 2 2 355 el6 4 9 x86
  • 更改jar包里的代码

    1 将class文件改成java文件 如果你的jar包中是包含源代码的 即包含java文件 请跳过此步 先将jar包通过winrar或者快压等解压缩软件将jar包解压缩 再通过一些专门的Java反编译工具将class文件转换为java文件
  • 如何阅读他人的项目源代码程序

    阅读他人的项目源代码步骤 备份并编译运行代码 熟悉项目编程语言的语法和惯例用语 看项目文档 有机会可向项目开发人员请教 自上而下构建项目程序的系统架构 建立系统架构和功能逻辑之间的关联 核心代码重点剖析与注释 调整心态 反复阅读 工欲善其事
  • Linux内核调试技术——进程D状态死锁检测

    Linux的进程存在多种状态 如TASK RUNNING的运行态 EXIT DEAD的停止态和TASK INTERRUPTIBLE的接收信号的等待状态等等 可在include linux sched h中查看 其中有一种状态等待为TASK
  • LZW编码

    LZW Lempel Ziv Welch 编码又称字串表编码 是Welch将Lemple和Ziv所提出来的无损压缩技术改进后的压缩方法 GIF图像文件采用的是一种改良的LZW压缩算法 通常称为GIF LZW压缩算法 下面简要介绍GIF LZ
  • Qt里通过传递函数指针实现动态绑定信号/槽

    test h include

随机推荐