Ein Signal kann in QT nicht an einen Steckplatz binden
-
18-09-2019 - |
Frage
Ich habe gerade mit QT angefangen und kenne das Konzept von Signal/Steckplatz, aber bei der Implementierung habe ich ein Problem. Schauen Sie sich meinen Code an:
#include "test.h"
#include <QCoreApplication>
test::test()
{
// TODO Auto-generated constructor stub
}
test::~test()
{
// TODO Auto-generated destructor stub
}
void test::fireslot(){
qDebug("the slot fired");
}
void test::dosignaling(){
QObject::connect(this,SIGNAL(callslot()),this,SLOT(fireslot()));
}
HINWEIS: Ich habe das q_object -Makro hinzugefügt und erben von QObject in test.h
Und hier ist mein Testbehälter
#include "test.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//test t1();
test *t2 = new test();
t2->dosignaling();
return a.exec();
}
Code Compile perfekt, aber das Nichts wird passieren. Ich bin mir nicht ganz sicher, welchen Teil ich Fehler gemacht habe:-?
Lösung
Der Code, den Sie haben void test::dosignaling
verbindet einen Slot "Fireslot" mit einem Signal "Callslot", aber wo sind Sie ausstrahlen das callslot
Signal?
Sie sollten Ihren Code ändern und Ihre platzieren QObject::connect()
im Konstruktor (oder an einem anderen Ort) und ändern Sie Ihre dosignaling
Methode an:
void test::dosignaling()
{
emit callslot();
}
Sie haben auch die Header -Datei nicht angezeigt, sollte jedoch eine Deklaration des Callslot -Signals wie folgt enthalten:
class test
{
...
signals:
void callslot();
};