Qt中解决信号和槽不能使用自定义结构体的问题

在Qt中信号和槽使用自定义的结构时,运行的时候发现报错不能识别结构体
解决办法:

  1. 一定要将自定义结构体定义为typedef struct
  2. 使用Q_DECLARE_METATYPE(结构体名),将结构体注册为元对象
  3. 使用QVariant打包数据并发送
  4. 在槽函数中将QVariant解包成自定义的结构体,即可使用

例子:
在datainfo.h文件中这样定义结构体

typedef struct search_list
{
    QString url;
    QString name;
    QDateTime startTime;
    QDateTime endTime;
    qint64 Time;
}search_list;
Q_DECLARE_METATYPE(search_list)

videosave.h文件

signals:
	void videosaveListaddSignal(const QVariant varValue);

record.h文件

public slots:	
	void serchList_add(const QVariant varValue);

将信号和槽链接

connect(my_videosave,SIGNAL(videosaveListaddSignal(QVariant)),my_record, SLOT(serchList_add(QVariant)));

发送信号:
videosave.cpp文件

search_list list;
...填充list...
QVariant varValue = QVariant::fromValue(list);  //使用QVariant打包数据
 emit videosaveListaddSignal(varValue); 

槽函数接收信号:
record.cpp文件

void record::serchList_add(const QVariant varValue)
{
	if (varValue.canConvert<search_list>())
	{
	     search_list list = varValue.value<search_list>();   //将QVariant解包后得到search_list结构体
	}
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值