zoukankan      html  css  js  c++  java
  • 信号与槽的参数如果是自定义参数,需要注册

    背景:一个线程通过signal-slot发送PVCI_CAN_OBJ类型的值到主线程中,

    错误提示:

    QObject::connect: Cannot queue arguments of type 'PVCI_CAN_OBJ'

    (Make sure 'PVCI_CAN_OBJ' is registered using qRegisterMetaType().)

    原因:在线程中通过signal-slot传递信息时,参数默认放到队列中的,但PVCI_CAN_OBJ是自定义的参数,不是Qt自带的参数结构。

    解决方法:

    一、将不识别的参数结构进行注册,让Qt能够识别。

     包含头文件

    #include <QMetaType>在构造函数中调用其方法完成注册:

    qRegisterMetaType<PVCI_CAN_OBJ>("PVCI_CAN_OBJ");//注册PVCI_CAN_OBJ类型

    二、使用QVariant

    struct myStruct
    {
      int a;
      float b;
    };
    Q_DECLARE_METATYPE(myStruct);

    然后以QVariant代替自定义的结构体

    connect(this, SIGNAL(m_signal(QVariant)), this, SLOT(m_slot(QVariant)));

    在发射信号前,将自定义结构体打包为QVariant

    myStruct mstruct;
    QVariant data;
    data.setValue(mstruct);
    emit signal_child(data);

    在槽函数中,解析QVariant

    myStruct mstruct = data.value<myStruct>();
  • 相关阅读:
    【游戏开发】Excel表格批量转换成CSV的小工具
    iOS
    iOS
    Xcode
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/judes/p/6958941.html
Copyright © 2011-2022 走看看