QThread 与 QTimer 连接问题

bar*_*dao 3 c++ qt qthread qt5 qtimer

这有什么问题吗?它给了我奇怪的编译错误:

候选函数不可行:第二个参数没有从“void (QThread::*)(QThread::QPrivateSignal)”到“const char *”的已知转换

QTimer timer;
timer.setInterval(3000);
connect(&timer, &QTimer::timeout, this, &ThisClass::runConnectionCheck);
QThread connectionThread;
timer.moveToThread(&connectionThread);
connect(&connectionThread, &QThread::started, &timer, &QTimer::start);
connectionThread.start();
Run Code Online (Sandbox Code Playgroud)

eyl*_*esc 6

有 2 个QTimer槽名为start(),因此编译器会产生混淆,因此您应该QOverload

connect(&connectionThread, &QThread::started, &timer, QOverload<>::of(&QTimer::start));
Run Code Online (Sandbox Code Playgroud)

或者static_cast<>()

connect(&connectionThread, &QThread::started, &timer,static_cast<void (QTimer::*)()>(&QTimer::start));
Run Code Online (Sandbox Code Playgroud)

@KubaOber提供了 2 个选项:

C++14:

qOverload<>(&QTimer::start)
Run Code Online (Sandbox Code Playgroud)

拉姆达:

[&]{ timer.start(); }
Run Code Online (Sandbox Code Playgroud)