繁体   English   中英

发射带有 qt 信号的 std::string

[英]emit std::string with qt signal

我正在尝试使用 qt 信号发出标准字符串。 信号将按队列传送。 我用 qRegisterMetaType 注册了类型,就像它在 qt 文档中所说的那样,但没有成功。 我像这样注册它qRegisterMetaType<std::string>("std::string")

你还应该这样做:

Q_DECLARE_METATYPE (std::string)

引用Qt Doc

添加Q_DECLARE_METATYPE()使所有基于模板的函数都知道类型 ,包括QVariant。 请注意, 如果您打算在排队信号和插槽连接中使用类型,或者在QObject的属性系统中使用,则还必须调用qRegisterMetaType(),因为名称是在运行时解析的。

我意识到当发送多个不同类型的信号时,这实际上有效,例如一个 int 和一个 std::string。 按照这个逻辑,下面的代码可能不起作用:

connect(senderObject.get(), &senderObject::signal, this, [this](std::string str_value){function(str_value)});

但这有效

connect(senderObject.get(), &senderObject::signal, this, [this](int int_val, std::string str_value){function(int_val,str_value)});

也许有一个允许这样做的重载模板,但如果只传递一个字符串,最好直接使用 QString

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM