Gibt es eine Beschränkung der Anzahl der Parameter von Signalen?Kein passender Anruf zum Verbinden - wenn ich 7 Parameter einstelle. funktioniert gut mit 6 Parametern
Im folgenden Code reduzieren Sie einfach 1 Parameter auf den Signalsteckplatz und arbeiten und der Fehler verschwindet.
Wie ist das siebte Argument zu übergeben?
Reproduzierbare Beispiel:
#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
Von [Dokumentation] (http://doc.qt.io/qt-5/signalsandslots.html#signals-and-slots-with-default-arguments): "Beachten Sie, dass diese Syntax nur funktioniert, wenn das Signal und der Slot 6 oder weniger Argumente haben, wenn Ihr Compiler keine variantenbasierten C++ 11-Vorlagen unterstützt." Sie können stattdessen die SIGNAL- und SLOT-Makros verwenden, die intern Strings erstellen. –
Setzen Sie diese Variablen in eine Struktur oder eine Klasse und übergeben Sie diese stattdessen. – thuga
@KarstenKoop sehr dankbar. –