2011-10-08 137 views
12

我想用qt信号发射标准字符串。信号将作为排队传递。我使用qRegisterMetaType注册类型,就像在qt文档中说的那样,但没有运气。我注册像这样 qRegisterMetaType<std::string>("std::string")用qt信号发射std :: string

回答

17

你也应该这样做:

Q_DECLARE_METATYPE (std::string) 

报价Qt Doc

添加Q_DECLARE_METATYPE()揭晓所有模板 基于功能的类型,包括QVariant。需要注意的是如果你打算使用 在排队信号和槽的连接或QObject中的 产权制度的类型,你也必须调用qRegisterMetaType()因为 名称是在运行时解决。

+0

我试过了,还是不行。此外,我的项目中有很多信号发出非qt类型,并且从未对它们执行过Q_DECLARE_METATYPE,只有qRegisterMetaType,并且它们正在工作。 – user152508

+1

我只是做了一个快速测试,同时使用qRegisterMetaType和Q_DECLARE_METATYPE确实有效。如果将其中任何一个放弃,都会导致运行时错误消息需要调用qRegisterMetaType。我的猜测是,对于您使用的其他类型,您没有使用Queued连接。 – Chris

+0

好吧,我正在使用这个重载void qRegisterMetaTypeStreamOperators(const char * typeName)也许这就是为什么它没有工作。当尝试这个overlaod int qRegisterMetaType()与Q_DECLARE_METATYPE的组合它的作品,所以非常感谢。 – user152508