如何将std :: string定义为一个类型,以便我可以使用排队连接从QThread中的文本发送到另一个?
我搜索并发现许多线程解决了这个问题。
Here one of the other threads available
但他们都将连接视为Qt 4版本。 (信号和插槽宏)。
现在,3年后,在Qt5.2可用的情况下,即使文档说明,我也无法找到解决方案:
我必须在标题中定义类型。 我尝试了Q_OBJECT去的地方以及课外。显然是在外面工作。
我试过了:
Q_DECLARE_METATYPE<std::string>();
Q_DECLARE_METATYPE(std::string);
Q_DECLARE_METATYPE<std::string>;
Q_DECLARE_METATYPE<std::string>(anothername declared for std::string with typedef);
所有这些都给了我错误,来自:语法错误:缺少';'之前,要取消缺少类型说明符,假设为int。 问题始终存在于这行代码中。
我正在一个方法中的同一个类中使用它,它在将新线程与排队连接连接之前注册该类型:
qRegisterMetaType<std::string>();
QObject::connect(worker, &Raytracer::textEmitted, gui_, &MainWindow::addText, Qt::QueuedConnection);
我做错了什么?
我必须使用QString使其工作。但是我如何才能使用std :: string?
答案 0 :(得分:2)
Q_DECLARE_METATYPE
应放在任何课程或职能之外。
正确的语法是Q_DECLARE_METATYPE(std::string)
,而不是;
。
所以您需要做的就是致电qRegisterMetaType
,您就可以在排队的连接中使用std::string
了。在连接语句之前的某处做类似的事情:
qRegisterMetaType<std::string>("std::string");
答案 1 :(得分:1)
在使用Q_DECLARE_METATYPE的文件中包含qmetatype.h标头。