QT自定义信号与槽发生重载解决办法

2023-10-27

信号与槽作为qt中的核心机制,在qt应用开发中经常会用的,但是原生的信号与槽连接传参,只支持基本的数据类型,比如char,int, float,double。

如果想要在信号与槽之间传递自定义参数,比如结构体,类等,就必须特别注意,因为在编译的时候不会报错,但是在执行的时候会报错,出现失效。

解决办法如下

#ifndef TEACHER_H
#define TEACHER_H

#include <QObject>


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

signals:

  void Hungry();
  void Hungry(QString foodName);

};
#endif // TEACHER_H
#

在teacher类中加入重载信号void Hungry(QString foodName);

#ifndef STUDENT_H
#define STUDENT_H

#include <QObject>

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

signals:

public slots:
    void Treat();
    void Treat(QString foodname);
};

#endif // STUDENT_H
#include "student.h"
#include <QDebug>

Student::Student(QObject *parent) : QObject(parent)
{

}
void Student::Treat()
{
 qDebug("请老师吃饭");
}

void Student::Treat(QString foodname)
{
 qDebug()<<foodname;
}

同样在student类中加入重载槽

使用时 emit tc->Hungry("宫保鸡丁"); 就可以触发带参数的信号了

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建一个老师对象
    this->tc = new Teacher(this);
    //创建一个学生对象
    this->st = new Student(this);

    //老师饿了 学生请客连接==
    //connect(tc, &Teacher::Hungry, st, &Student::Treat);
    //调用下课函数
    //classIsOver();
    //使用指针指向地址,使用函数指针
    void(Teacher::*teachersignal)(QString) =  &Teacher::Hungry;
    void(Student::*studentslot)(QString) =  &Student::Treat;
    connect(tc,teachersignal, st, studentslot);
    classIsOver();

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::classIsOver()
{
   // emit tc->Hungry(); //成功触发  使用emit关键字
   emit tc->Hungry("宫保鸡丁"); //成功触发  使用emit关键字
    //你是看的啥写的  wan'qu'na

}
 void(Teacher::*teachersignal)(QString) =  &Teacher::Hungry;   
void(Student::*studentslot)(QString) =  &Student::Treat;

函数指针基础:

1. 获取函数的地址

2. 声明一个函数指针

3.使用函数指针来调用函数

 

 

 

 

 

 

 

 

 

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

QT自定义信号与槽发生重载解决办法 的相关文章

  • QT从QTableWidgetItem继承到Widget并覆盖'<'运算符

    我想要一个QTableWidget具有定制的某些单元QProgressBars 并且我希望能够对包含这些的列进行排序 我的定制QProgressBar继承自两者QProgressBar and QTableWidgetItem 并且我正在覆
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
  • 如何访问Loader的sourceComponent中的QML对象?

    我可能需要读取或写入的一些属性Loader s sourceComponent来自一些外部函数 访问该房产的方式是什么x里面的对象的Loader s sourceComponent import QtQuick 2 0 Item width
  • 使用嵌入qt的mysql?

    我正在尝试使用嵌入 QT 的 mysql 我已经有一个与 mysqld 链接的 Qt mysql 插件 该插件可以很好地加载嵌入式数据库 但 QT 没有简单的方法来设置 dataDir 等嵌入式选项 我在这里看到 http doc qt i
  • 包含 Qt 标头的正确方法是什么?

    到目前为止我知道几种方法 includeQt 类 include
  • 如何在 Qt-Creator 中添加自定义构建步骤?

    构建我的应用程序后 我想将其复制到特定目录 在 Windows 7 上 自定义构建步骤 cmd exe c k copy MyPlugin dll HostApp Debug plugins 但我有错误 Can t run process
  • Qt 编译器标志顺序

    我的目标是消除某些类型的编译器警告 我发现可以通过在 pro 文件中添加编译器标志来做到这一点 QMAKE CXXFLAGS Wno unused variable Wno reorder 问题是它们被添加在 Qt 构建系统生成的标志之前
  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
  • 如何在不同的QT线程中创建一个窗口?

    我有一个应用程序 其中每个线程 主线程除外 都需要创建自己的窗口 我尝试创建一个线程然后调用this gt exec in the run功能 然而 在我接到那个电话之前我就收到了一个错误 ASSERT failure in QWidget
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • 为什么anchors.centerIn不适用于Column元素?

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为

随机推荐

  • 异步的AsyncHttpClient使用详解

    背景 前面的一篇文章 同步的HttpClient使用详解 中 提到了服务端通进行网络请求的方式 也讲述了在并发量大的情况下使用HttpClient的连接池来提高性能 此方法虽然很有效果 但是当访问量极大或网络不好的情况下也会出现某些网络请求
  • HyperLPR车牌识别技术算法之车牌粗定位与训练

    关于HyperLPR HyperLPR是一个使用深度学习针对对中文车牌识别的实现 与较为流行的开源的EasyPR相比 它的检测速度和鲁棒性和多场景的适应性都要好于目前开源的EasyPR HyperLPR可以识别多种中文车牌包括白牌 新能源车
  • js分享功能

    需求 页面需要添加分享到 微博 QQ空间 等功能 具体 div class jz blog a class jiathis button qzone QQ空间 a a class jiathis button tsina 新浪微博 a a
  • Cocos Creator性能调优优化集锦

    前言 一 为什么要做性能优化 性能 是一种优秀的能力 唤醒快 运行持久 稳定 这种能力在游戏上能让你的用户感觉很爽 表征表现为加载快 手机不发热 运行流畅 不卡顿 所以 性能优化的终极目标是 让你的用户感觉很爽 当然这种爽你不能以牺牲自己为
  • Docker快速部署Hadoop环境

    Docker安装部署Hadoop环境 通过三个容器来模拟三个节点 最后只保留Master节点实现搭建 安装环境 Ubuntu 22 04 1 LTS 和Docker 23 0 1 安装过程 拉取镜像 docker pull registry
  • 计算机视觉初步认识

    计算机视觉是使用计算机及相关设备对生物视觉的一种模拟 它的主要任务就是通过对采集的图片或视频进行处理以获得相应场景的三维信息 就像人类和许多其他类生物每天所做的那样 从计算机视觉领域可以衍生出大量有用的应用程序 下面是计算机视觉应用程序的一
  • FreeRTOS记录(八、用软件定时器?还是硬件定时器?)

    FreeRTOS软件定时器 相对前面的内容来说 软件定时器还是比较简单的 我们简单测试一下 因为是简单介绍 所以原理和源码的分析不会那么详细 具体可以根据文中API查看源码 使用起来记住创建 启动 回调函数核心步骤即可 增加测试Demo 再
  • 禁止 Cookie 使用 Session,采用 URL 重写,具体解决方案

    先叙述一下 session 的实现原理吧 session 服务器为每个客户端访问开辟的一块内存区域 可以存放一些客户端的一些操作信息 正常情况下在用户通过客户端访问服务器这个过程中 session 一直存活 直到客户端关闭 服务器中的 se
  • TWS耳机充电盒芯片方案、霍尔开关+无线充接收带电量显示方案

    旭鑫胜电子TWS充电盒方案XS016 RX 专门为TWS充电盒设计的无线充电接收方案XS016 RX XS016 RX无线充电接收芯片与锂电池充电管理芯片结合 以满足无线充电盒的设计要求 功能特点 1 符合qi1 2标准协议 2 具有异物检
  • CentOS-6.6-x86_64-minimal.iso镜像下载

    链接 https pan baidu com s 1FKfIvK65KzVxV96Gns7ivA https pan baidu com s 1FKfIvK65KzVxV96Gns7ivA 提取码 zt88
  • 2.1python程序控制-选择结构

    第1关 判断奇偶 任务描述 本关任务 编写一个能判断输入数字奇偶的小程序 相关知识 为了完成本关任务 你需要掌握 python如何进行数字的读取和if else条件控制结构 Begin your code here x int input
  • NNDL 实验五 前馈神经网络(1)二分类任务

    pytorch实现 4 1 神经元 4 1 1 净活性值 使用pytorch计算一组输入的净活性值z 净活性值z经过一个非线性函数f 后 得到神经元的活性值a 使用pytorch计算一组输入的净活性值 代码参考paddle例题 import
  • Hexo_更换主题(Next)

    Hexo 更换主题 Next Hexo更换主题 只需要将主题文件拷贝到自己博客根目录下的themes子目录内 然后修改配置文件 即可将hexo默认的主题更换为自己想要的主题 下载Next 打开git bash here命令提示符 执行 cd
  • 初体验深信服的云桌面

    昨天上午深信服的工程师到这边来安装服务器 本想看一下具体的安装 但是上午有其他事情 没有看成 下午他给我讲了一下具体的使用 我体验了一下深信服的云桌面 总体感觉管理员的维护和客户的使用都比较方便 但是可能是服务器的配置一般 体验谈不上顺滑
  • react的生命周期

    目录 一 初始化阶段 constructor static getDerivedStateFromProps componentWillMount UNSAFE componentWillMount render componentDidM
  • pg_dump 不能用 出现pg_dump: No matching tables were found,pg_dump: schema with OID 1515227 does not exi

    使用sql查询 创建函数 直接复制即可 CREATE OR REPLACE FUNCTION public show create table in schema name varchar in table name varchar RET
  • 初步了解爆破(附Burp suite)

    huihui爆破通常是网站管理 运营人员由于安全意识不足 为了方便 避免忘记密码等 使用了非常容易记住的密码 或者是直接采用了系统的默认密码等 攻击者利用此漏洞可直接进入应用系统或者管理系统 从而进行系统 网页 数据的篡改与删除 非法获取系
  • 第十五章 Scala进阶——隐式转换与隐式参数

    考虑如下场景 假设编写了一个向量类MyVector 并且包含了一些向量的基本操作 因为向量可以与标量做数乘运算 所以需要一个计算数乘的方法 它应该接收一个类型为基本值类的参数 在向量对象myVec调用该方法时 可以写成诸如 myVec 2
  • python中time clock方法不可用的解决技巧

    Python time clock 函数以浮点数计算的秒数返回当前的CPU时间 用来衡量不同程序的耗时 比time time 更有用 这个需要注意 在不同的系统上含义不同 在UNIX系统上 它返回的是 进程时间 它是用秒表示的浮点数 时间戳
  • QT自定义信号与槽发生重载解决办法

    信号与槽作为qt中的核心机制 在qt应用开发中经常会用的 但是原生的信号与槽连接传参 只支持基本的数据类型 比如char int float double 如果想要在信号与槽之间传递自定义参数 比如结构体 类等 就必须特别注意 因为在编译的