用qt信号发出std::string

emit std::string with qt signal

本文关键字:std string qt 信号      更新时间:2023-10-16

我正试图用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