QT, не может привязать сигнал QProcess :: finish (int, QProcess :: ExitStatus) к лямбде - PullRequest
0 голосов
/ 19 февраля 2019

Я использую c ++ 11 и QT 5.12.
Я пытаюсь подключиться к сигналу QProcess :: finish (int, QProcess :: ExitCode) к лямбде, но использую код

QProcess PlayerProcess;
connect(PlayerProcess, &QProcess::finished,
[=](int exitCode, QProcess::ExitStatus exitStatus)
{
 //  Function body
}

компилятор говорит

../Qt/5.12.1/gcc_64/include/QtCore/qobject.h:300:13: note:   no known conversion for argument 1 from ‘QProcess’ to ‘const Object* {aka const QProcess*}’
../Qt/5.12.1/gcc_64/include/QtCore/qobject.h:308:13: note: candidate: template<class Func1, class Func2> static typename std::enable_if<(QtPrivate::FunctionPointer<Func2>::ArgumentCount == -1), QMetaObject::Connection>::type QObject::connect(const typename QtPrivate::FunctionPointer<Func>::Object*, Func1, const QObject*, Func2, Qt::ConnectionType)
             connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
             ^~~~~~~
../Qt/5.12.1/gcc_64/include/QtCore/qobject.h:308:13: note:   template argument deduction/substitution failed:
../Launcher/mainwindow.cpp:184:9: note:   candidate expects 5 arguments, 3 provided
         );

Немного погуглив, единственные связанные с этим проблемы, которые я мог найти, заключались в том, что класс MainWindow не был производным от QObject (но мой MainWindow наследуется от QMainWindow, которыйпроисходит от QWidget), или что компилятор не может разрешить перегруженный сигнал QProcess :: finish (это может быть (int) или (int, QProcess :: ExitCode), но для этого я попробовал оба быстрых исправления, которые я смог найти:

void  (QProcess::* mySignal)(int, QProcess::ExitStatus) = &QProcess::finished;
auto mySignal2 = QOverload<int,QProcess::ExitStatus>::of(&QProcess::finished);

но при использовании обоих компилятор ошибка не меняется.

Что я здесь упустил?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2019

Как сказал @ymoreau, для функции QObject :: connect нужны параметры в качестве указателей, поэтому я изменил первый параметр коннекта с помощью & PlayerProcess.

Затем проблема перегрузки QProcess :: done была решена с помощью одного издве явные перегрузки.

...