mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 14:55:36 +08:00
Ref T486 Using QMetaObject::invokeMethod with pointer-to-member-function (or functor).
This commit is contained in:
@@ -129,7 +129,7 @@ namespace BlackCore
|
||||
|
||||
ISimulatorListener *listener = m_plugins->getListener(simulatorInfo.getIdentifier());
|
||||
Q_ASSERT(listener);
|
||||
QMetaObject::invokeMethod(listener, "stop", Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(listener, &ISimulatorListener::stop, Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
int CContextSimulator::checkListeners()
|
||||
@@ -480,7 +480,7 @@ namespace BlackCore
|
||||
// start if not already running
|
||||
if (!listener->isRunning())
|
||||
{
|
||||
const bool s = QMetaObject::invokeMethod(listener, "start", Qt::QueuedConnection);
|
||||
const bool s = QMetaObject::invokeMethod(listener, &ISimulatorListener::start, Qt::QueuedConnection);
|
||||
Q_ASSERT_X(s, Q_FUNC_INFO, "cannot invoke method");
|
||||
Q_UNUSED(s);
|
||||
}
|
||||
@@ -993,7 +993,7 @@ namespace BlackCore
|
||||
ISimulatorListener *listener = m_plugins->getListener(info.getIdentifier());
|
||||
if (listener)
|
||||
{
|
||||
const bool s = QMetaObject::invokeMethod(listener, "stop");
|
||||
const bool s = QMetaObject::invokeMethod(listener, &ISimulatorListener::stop);
|
||||
Q_ASSERT_X(s, Q_FUNC_INFO, "Cannot invoke stop");
|
||||
Q_UNUSED(s);
|
||||
}
|
||||
|
||||
@@ -220,6 +220,7 @@ namespace BlackCore
|
||||
if (entities == CEntityFlags::NoEntity) { return; }
|
||||
if (!this->isInternetAccessible(QStringLiteral("No network/internet access, will not read %1").arg(CEntityFlags::flagToString(entities)))) { return; }
|
||||
|
||||
//! \todo MS 2018-12 Error: CDatabaseReader has no ps_read method
|
||||
const bool s = QMetaObject::invokeMethod(this, "ps_read",
|
||||
Q_ARG(BlackMisc::Network::CEntityFlags::Entity, entities),
|
||||
Q_ARG(BlackMisc::Db::CDbFlags::DataRetrievalModeFlag, mode),
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace BlackCore
|
||||
|
||||
void CVatsimStatusFileReader::readInBackgroundThread()
|
||||
{
|
||||
const bool s = QMetaObject::invokeMethod(this, "ps_read");
|
||||
const bool s = QMetaObject::invokeMethod(this, &CVatsimStatusFileReader::ps_read);
|
||||
Q_ASSERT_X(s, Q_FUNC_INFO, "Invoke failed");
|
||||
Q_UNUSED(s);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ namespace BlackMisc
|
||||
void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message)
|
||||
{
|
||||
const CStatusMessage statusMessage(type, context, message);
|
||||
const auto invokee = [statusMessage] { CLogHandler::instance()->logLocalMessage(statusMessage); };
|
||||
#if defined(Q_CC_MSVC) && defined(QT_NO_DEBUG)
|
||||
if (type == QtFatalMsg) { MessageBoxW(nullptr, message.toStdWString().c_str(), nullptr, MB_OK); }
|
||||
#endif
|
||||
@@ -51,10 +52,10 @@ namespace BlackMisc
|
||||
{
|
||||
// Fatal message means this thread is about to crash the application. A queued connection would be useless.
|
||||
// Blocking queued connection means we pause this thread just long enough to let the main thread handle the message.
|
||||
QMetaObject::invokeMethod(CLogHandler::instance(), "logLocalMessage", Qt::BlockingQueuedConnection, Q_ARG(BlackMisc::CStatusMessage, statusMessage));
|
||||
QMetaObject::invokeMethod(CLogHandler::instance(), invokee, Qt::BlockingQueuedConnection);
|
||||
return;
|
||||
}
|
||||
QMetaObject::invokeMethod(CLogHandler::instance(), "logLocalMessage", Q_ARG(BlackMisc::CStatusMessage, statusMessage));
|
||||
QMetaObject::invokeMethod(CLogHandler::instance(), invokee);
|
||||
}
|
||||
|
||||
void CLogHandler::install(bool skipIfAlreadyInstalled)
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace BlackMisc
|
||||
worker->setObjectName(name);
|
||||
|
||||
worker->moveToThread(thread);
|
||||
const bool s = QMetaObject::invokeMethod(worker, "ps_runTask");
|
||||
const bool s = QMetaObject::invokeMethod(worker, &CWorker::ps_runTask);
|
||||
Q_ASSERT_X(s, Q_FUNC_INFO, "cannot invoke");
|
||||
Q_UNUSED(s);
|
||||
thread->start();
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace BlackMisc
|
||||
template <typename F>
|
||||
void singleShot(int msec, QObject *target, F &&task)
|
||||
{
|
||||
QSharedPointer<QTimer> timer(new QTimer, [](QObject * o) { QMetaObject::invokeMethod(o, "deleteLater"); });
|
||||
QSharedPointer<QTimer> timer(new QTimer, [](QObject * o) { QMetaObject::invokeMethod(o, &QObject::deleteLater); });
|
||||
timer->setSingleShot(true);
|
||||
timer->moveToThread(target->thread());
|
||||
QObject::connect(timer.data(), &QTimer::timeout, target, [trace = getStackTrace(), task = std::forward<F>(task), timer]() mutable
|
||||
@@ -63,7 +63,7 @@ namespace BlackMisc
|
||||
timer.clear();
|
||||
task();
|
||||
});
|
||||
QMetaObject::invokeMethod(timer.data(), "start", Q_ARG(int, msec));
|
||||
QMetaObject::invokeMethod(timer.data(), [t = timer.data(), msec] { t->start(msec); });
|
||||
}
|
||||
//! @}
|
||||
|
||||
|
||||
@@ -212,13 +212,13 @@ namespace BlackMiscTest
|
||||
CValueCache otherCache(1);
|
||||
connect(&thisCache, &CValueCache::valuesChangedByLocal, &thisCache, [ & ](const CValueCachePacket &values)
|
||||
{
|
||||
QMetaObject::invokeMethod(&thisCache, "changeValuesFromRemote", Q_ARG(BlackMisc::CValueCachePacket, values), Q_ARG(BlackMisc::CIdentifier, thisProcess));
|
||||
QMetaObject::invokeMethod(&otherCache, "changeValuesFromRemote", Q_ARG(BlackMisc::CValueCachePacket, values), Q_ARG(BlackMisc::CIdentifier, otherProcess));
|
||||
QMetaObject::invokeMethod(&thisCache, [=, &thisCache] { thisCache.changeValuesFromRemote(values, thisProcess); });
|
||||
QMetaObject::invokeMethod(&otherCache, [=, &otherCache] { otherCache.changeValuesFromRemote(values, otherProcess); });
|
||||
});
|
||||
connect(&otherCache, &CValueCache::valuesChangedByLocal, &thisCache, [ & ](const CValueCachePacket &values)
|
||||
{
|
||||
QMetaObject::invokeMethod(&thisCache, "changeValuesFromRemote", Q_ARG(BlackMisc::CValueCachePacket, values), Q_ARG(BlackMisc::CIdentifier, otherProcess));
|
||||
QMetaObject::invokeMethod(&otherCache, "changeValuesFromRemote", Q_ARG(BlackMisc::CValueCachePacket, values), Q_ARG(BlackMisc::CIdentifier, thisProcess));
|
||||
QMetaObject::invokeMethod(&thisCache, [=, &thisCache] { thisCache.changeValuesFromRemote(values, otherProcess); });
|
||||
QMetaObject::invokeMethod(&otherCache, [=, &otherCache] { otherCache.changeValuesFromRemote(values, thisProcess); });
|
||||
});
|
||||
|
||||
for (int i = 0; i < 4; ++i) { QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Empty cache value")); }
|
||||
|
||||
Reference in New Issue
Block a user