带有编译时检查的 QMetaObject::invokeMethod 替代方案

Isa*_*aac 5 qt signals-slots compile-time type-safety qtcore

此外,QMetaObject::invokeMethod是否有任何类型安全的方式来异步调用方法/槽(又名在 GUI 线程中对其执行进行排队)?

没有QMetaObject::invokeMethod编译时检查函数名称。通过字符串指定成员函数也会产生开销,因为每次调用都会执行查找和字符串匹配。

我想知道是否有类似于QObject::connect调用提供编译时检查的方法的新语法的内容。

一种解决方案是使用信号槽架构,但这强制将每个调用者代码包装在 QObject 类中,以便能够发出该信号。

tho*_*mas 1

可以使用 QTimer::singleShot 来实现此目的

QTimer::singleShot(0, object, &Object::method...);
--
QTimer::singleShot(0, object, [object](){
  object->method(arg1, arg2, ...);
});
Run Code Online (Sandbox Code Playgroud)

注意:调用的线程QTimer::singleShot必须具有QEventLoop.