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:-?

War es hilfreich?

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();
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top