[英]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.