我想使用QMetaObject::invokeMethod()从不同的线程异步调用插槽
包含插槽的类声明为:
class Paintable : public QObject {
Q_OBJECT
[...]
public slots:
void drawString(uint16_t x, uint16_t y, uint16_t size, const char* str, color c);
}
调用invokeMethod的方法定义为:
void drawStringAsynchronously(uint16_t x, uint16_t y, uint16_t size, const char* str, color c) {
QMetaObject::invokeMethod(paintable,
"drawString",
Qt::QueuedConnection,
Q_ARG(uint16_t, x), Q_ARG(uint16_t, y), Q_ARG(uint16_t, size),
Q_ARG(const char*, str), Q_ARG(color, c));
}
(其中paintable
类型为Paintable*
)
但是 Qt 似乎无法在 invokeMethod 中使用 uint16_t 或 char* 因为在运行时我收到以下消息:
QMetaMethod::invoke: Unable to handle unregistered datatype 'const char*'
和
QMetaMethod::invoke: Unable to handle unregistered datatype 'uint16_t'
分别。
我能够使用成功注册我的自定义结构color
,但是qRegisterMetaType()
因为没有结构或类,这将不起作用。uint16_t
char*
如果有人能告诉我如何做或展示一个好的选择,我会很高兴。