Ctk:使用sendEvent传递自定义类型的数据

Posted 好儿郎-志在四方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ctk:使用sendEvent传递自定义类型的数据相关的知识,希望对你有一定的参考价值。

Ctk:使用sendEvent传递自定义类型的数据

使用Ctk插件框架开发项目的时候,经常需要使用Ctk提供的插件之间消息通信机制,sendEvent()和postEvent()是常用的两种方式。

使用ctkDictionary承载我们想要传递数据的载体。ctkDictionary本质是一个QHash。现在就问题就变成了如果将自定义数据存储到QVariant中。见 QVariant::fromValue()接口。

Typedefs 
typedef QHash< QString, QVariant > 	ctkDictionary

举例:使用sendEvent传递结构体数据。

声明结构体

struct Users

    QString JobNomber;
    QString Name;
    QString PassWd;
    QString Department;
    QString Role;
    QString InService;
    QString Description;
;

注册自定义类型

Q_DECLARE_METATYPE(Users)
Q_DECLARE_METATYPE(QVector<Users>)

发送消息

void publish()

    // 获取插件上下文
    ctkPluginContext* context = ctkPluginFrameworkLauncher::getPluginContext();
    ctkServiceReference ref = context->getServiceReference<ctkEventAdmin>();
    if (ref)
    
        ctkEventAdmin* eventAdmin = context->getService<ctkEventAdmin>(ref); 
        ctkDictionary props;
        
        Users user;
        user.JobNomber = "007";
        user.Name = "hsp";
        user.PassWd = "888168";
        user.Department = QString::fromLocal8Bit("技术中心");
        user.Role = QString::fromLocal8Bit("管理员");
        user.InService = "1";
        user.Description = "this is Test";
        
        QVector<Users> vec;
        vec.append(user);       
        props["User"] = QVariant::fromValue(vec);	//将vec存储到QVariant中
        ctkEvent event("org/commontk/DatabaseManager/published/AddUser", props);
        eventAdmin->sendEvent(event);

接收消息

void DatabaseManagerImpl::handleEvent(const ctkEvent &event)

    if(event.getTopic().contains("AddUser" , Qt::CaseInsensitive))
    
        QVector<Users>  recvInfo = event.getProperty("User").value<QVector<Users>>();
    

以上是关于Ctk:使用sendEvent传递自定义类型的数据的主要内容,如果未能解决你的问题,请参考以下文章

13:高级篇 - CTK 事件管理机制(signal/slot)

QT 信号与槽 中传递自定义数据类型

Qt发送事件与自定义事件

01:入门篇 - 初识 CTK

自定义数据类型使用QVariant转换的方法

如果自定义类型从 C++ 作为 const 传递,如何使用 QML 注册自定义类型