Есть ли ограничение на количество параметров сигналов?Нет соответствующего вызова для соединения - когда я устанавливаю 7 параметров. отлично работает с 6 параметрами
/home/.../testerslow/jjjj.h:36: error: no matching function for call to 'Controller::connect(Controller* const, void (Controller::*)(int, int, int, int, int, int, int), Worker*&, void (Worker::*)(int, int, int, int, int, int, int))'
connect (this, &Controller::operate, worker, &Worker::doWork);
В следующем коде просто уменьшите 1 параметр до уровня сигнала и работайте, и ошибка исчезнет.
Каков путь прохождения 7-го аргумента?
воспроизводимый пример:
#ifndef JJJJ
#define JJJJ
#include <QQuickItem>
#include <QDebug>
#include <QThread>
class Worker : public QObject
{
Q_OBJECT
public:
Worker() { }
public slots:
void doWork (int one, int b, int c, int d, int e, int f, int h)
{
emit resultReady("");
}
signals:
void resultReady(const QString &result);
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller() {
Worker *worker = new Worker;
connect (&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect (this, &Controller::operate, worker, &Worker::doWork);
connect (worker, &Worker::resultReady, this, &Controller::handleResults);
worker->moveToThread(&workerThread);
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const QString &) {}
signals:
void operate(int, int, int,int,int,int, int);
};
#endif // JJJJ
Из [документация] (http://doc.qt.io/qt-5/signalsandslots.html#signals-and-slots-with-default-arguments): «Обратите внимание, что если ваш компилятор не поддерживает C++ 11 variadic templates, этот синтаксис работает только в том случае, если сигнал и слот имеют 6 аргументов или меньше». Вместо этого вы можете использовать макросы SIGNAL и SLOT, которые внутренне создают строки. –
Поместите эти переменные в структуру или класс и передайте это вместо этого. – thuga
@ KarstenKoop очень благодарен. –