Кроме того, QMetaObject::invokeMethod
существует ли какой-либо безопасный способ вызова метода/слота асинхронно (a.k.a его выполнение в потоке графического интерфейса)?QMetaObject :: invokeMethod альтернатива с проверкой времени компиляции
QMetaObject::invokeMethod
не имеет проверки времени на компиляцию имен функций. Существует также накладные расходы при определении функции-члена строкой, так как для каждого вызова выполняется поиск и сопоставление строк.
Интересно, есть ли что-то похожее на новый синтаксис QObject::connect
для вызова метода, который обеспечивает проверку времени компиляции.
Одно из решений использует архитектуру сигнального слота, но это обеспечивает обертывание каждого кода вызывающего абонента в классе QObject, чтобы он мог испускать этот сигнал.
Это, по сути, https://bugreports.qt.io/browse/QTBUG-36861, я думаю. – peppe
@peppe: Кажется, нет альтернативы: https://bugreports.qt.io/browse/QTBUG-55304 – Isaac
Взгляните на [это] (https://stackoverflow.com/a/21653558/2666212). Таким образом, вместо 'QMetaObject :: invokeMethod (object," method ")' вы можете сделать что-то вроде этого: '{QObject src; QObject :: connect (& src, & QObject :: destroy, object, & Object :: method);} 'вы можете даже использовать функцию lamba с контекстом' QObject' таким образом. , , – Mike