目录

  • 一、使用情景
  • 二、使用步骤
    • 1.全局宏定义
    • 2.示例:

一、使用情景

1、在使用带参数的信号与槽的时候,有时需要传递不常见的结构或者自定义结构,此时需要用到QVariant来传参,如果想传递多个又不想参数列表太长,还可以传指针


二、使用步骤

1.全局宏定义

Q_DECLARE_METATYPE(type);//也可普通类型指针、结构体指针等或者connect自定义类型前调用
qRegisterMetaType<AitSWaferTable>("AitSWaferTable"/*自定义类型*/);

2.示例:

//头文件
Q_DECLARE_METATYPE(std::vector<double>*);//注册类型,否则用不了
class A
{void Func();
signals:void SignalShowAssistLine(QVariant,QVariant);
}Class B
{private slots:void SlotShowAssistLine(QVariant ,QVariant );
}//cpp文件
int main(int argc, char *argv[])
{A a;B b;connect(&a,SIGNAL(SignalShowAssistLine(QVariant,QVariant)),&b,SLOT(SlotShowAssistLine(QVariant,QVariant)));a.Func();
}
void B::SlotShowAssistLine(QVariant lineX ,QVariant lineY)//槽函数
{std::vector<double> tmpLineX[4],tmpLineY[4];QVector<double> QlineX[4],QlineY[4];std::vector<double>* tmpPtr;for (int i = 0; i < 4; i++){tmpPtr = lineX.value<std::vector<double>*>();tmpLineX[i] = tmpPtr[i];tmpPtr = lineY.value<std::vector<double>*>();tmpLineY[i] = tmpPtr[i];}//打断点可以看到这里的 tmpLineX 和 tmpLineY 的地址和值都和信号发送前的结构体一致
}void A::Func()
{std::vector<double>* tmpAssistLineX;std::vector<double>* tmpAssistLineY;std::vector<double>* tmp = new std::vector<double>[8];tmpAssistLineX = tmp; tmpAssistLineY = tmp+4;for (int i = 0; i < code.size(); i++){tmpAssistLineX[0].push_back(i*2);tmpAssistLineY[0].push_back(i*2+1);}QVariant QAssistLineX,QAssistLineY;QAssistLineX.setValue(tmpAssistLineX);//设置前面的值进QVariant 内QAssistLineY.setValue(tmpAssistLineY);emit SignalShowAssistLine(QAssistLineX,QAssistLineY);//发送带参数的信号
}
//

信号与槽QVariant传递结构体指针相关推荐

  1. c语言如何传递结构体指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  2. C语言结构体指针的使用方法

    1.首先定义一个结构体,给它取别名: typedef struct node{ struct node * next://指向下一节点 int data://数据域 }pnode,*linklist; ...

  3. c语言结构体指针使用方法,C语言结构体指针的使用方法

    1.首先定义一个结构体,给它取别名: typedef struct node{ struct node * next://指向下一节点 int data://数据域 }pnode,*linklist; ...

  4. 《带你学C带你飞》—— SE44传递结构体变量和结构体指针

    使用结构体嵌套.结构体函数来写书的信息的程序 #include <stdio.h>struct Date {int year;int month;int day; };struct Boo ...

  5. c语言 机构体传给指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  6. C++_结构体指针_嵌套结构体_结构体做为函数参数_结构体值传递和指针传递---C++语言工作笔记026

    然后我们来看结构体指针. 可以看到我们先去定义一个结构体 然后我们在main函数中,去声明一个结构体 s 然后我们定义一个指针 int *p = &s; 指向这个结构体变量. 这里要注意

  7. Go 学习笔记(14)— 结构体定义、实例化、初始化、匿名结构体、结构体访问、结构体作为形参、结构体指针

    Go 语言中没有 "类" 的概念,也不支持 "类" 的继承等面向对象的概念.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法. 1. 结 ...

  8. c++ map嵌套队列(队列嵌套结构体指针)ok

    map中嵌套队列,队列中是结构体,有一个问题,结构体中的值不更新 #include <iostream> #include <queue> #include<map> ...

  9. C语言结构体指针与结构体变量作形参的区别

    区别 结构体变量 结构体变量作为函数参数,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变 结构体指针 结构体指针作为函数参数,传递的是指向结构体变 ...

最新文章

  1. 工资8000以下的程序员注意了:《零coding数据大屏实战宝典.pdf》
  2. 【采用】互联网反欺诈体系建设
  3. 朴素贝叶斯原理及实现
  4. Django之验证码的实现,简单快捷的方法
  5. idea中svn的更新、检出、提交操作
  6. 以相关组为基础的3D物体识别
  7. Java面试中常问的Spring方面问题(涵七大方向共55道题,含答案)
  8. php连接mysql MariaDB_PHP+MariaDB数据库操作基本技巧
  9. matlab复变函数应用,matlab在复变函数中的一些应用修改后的.doc
  10. 家用冰箱里面用的抽屉模具图档分析
  11. CPU天梯图2022
  12. ITIL 2011 -- 服务运营的5个流程简介 (上)
  13. 小白学习HTML(一)——html基本格式
  14. uni H5 苹果手机调微信支付失败
  15. KeyBERT进行中文关键词提取
  16. web页面设计实训——03.12
  17. 大数据和人工智能未来发展趋势
  18. Vivado 2019.1安装包下载
  19. Oracle等待事件(三)—— buffer busy waits 常见原因及对应解决方法
  20. 第五次实验:简单的使用示波器

热门文章

  1. 指针数组 c ++_了解C ++中的数组指针
  2. 什么是SQL Server DATEDIFF()方法?
  3. 抽象类的继承/纯虚函数的实现
  4. MySQL与Redis缓存问题-开课吧
  5. 微积分8--相关变化率
  6. JavaScript模块化开发(一)基础知识
  7. 《面向模式的软件体系结构1--模式系统》读书笔记(7)--- 通信
  8. 【转】No Persistence provider for EntityManager问题
  9. 空卡安装设置树莓派4B并安装opencv+QT
  10. Ubuntu下自定义调整CPU工作频率(用于省电或提高性能都好用)