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传递自定义类型的数据的主要内容,如果未能解决你的问题,请参考以下文章