Hallo, ich habe eine GUI mit QT gestaltet. In der GUI gibt es ein selbsterstelltes Objekt (Picdisplay), das Bilder anzeigt, dieses Objekt soll den Text eines Labels (Label) ändern können. Die zwei Objekte kennen sich nicht. (Mit ui->Label->setText(„Test“) geht es nicht). Wie kann ich die 2 Objekte bekannt machen, so, dass das Bildobjekt den Text auf das Label schreiben kann. Vielen Dank im Voraus.
Loopy schrieb: > Hallo, > ich habe eine GUI mit QT gestaltet. > In der GUI gibt es ein selbsterstelltes Objekt (Picdisplay), das Bilder > anzeigt, dieses Objekt soll den Text eines Labels (Label) ändern können. > Die zwei Objekte kennen sich nicht. > (Mit ui->Label->setText(„Test“) geht es nicht). > Wie kann ich die 2 Objekte bekannt machen, so, dass das Bildobjekt den > Text auf das Label schreiben kann. So wie das in QT vorgesehen ist. Das eine Objekt sendet ein Signal aus, das andere hat einen Slot, in dem es das Signal auffängt. Auf deutsch: Das Picdisplay brüllt in den Raum "Ich hab da was". Und unter anderem reagiert dein Label (da wirst du dir noch eine Klasse dafür machen müssen) auf diesen ungerichteten Zuruf.
Hallo, ich habe es schon mit connect probiert, aber da kommt bei Visual Studio immer die Fehlermeldung, wenn ich ein Signal definieren will: " fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden " Als normale void Funktion kommt allerdings keine Fehlermeldung.
Wo ist der Quellcode? Ruhig ein Minimalbeispiel, wo der Fehler aber auch auftritt. Ansonsten: Das connect muss in einer Ebene sein, wo beide Objekte bekannt sind. Bsp: picdisplay und label werden in der main.cpp erzeugt, also kannst hier mit dem connect-Befehl eine Verbindung herstellen.
1 | QObject::connect(picdisplay, SIGNAL(setLabel(QString)), |
2 | label,SLOT(getLabel(QString))); |
Für Signals-Slots musst du in der Klassen-Definitonen noch Q_OBJECT mit einpflegen. Das steht aber auch alles in der "QObject Class Reference" im "Qt Assistant" drin. Wenn das Q_OBJECT gefehlt hat, ruhig einen qmake-Befehl mal abfeuern, wobei ich nie mit VS in Verbindung mit Qt gearbeitet habe. Der QtCreator ist mir da viel sympatischer. Ansonsten, ein Signal wird nur deklariert, es ist ja nur ein Funktions- bzw. Methoden-Prototyp! Siehe "Signals & Slots" widerrum im "Qt Assistant". Aber ohne (Minimal-)Beispiel wird hier eh nur intensivst geraten. ;-)
raute schrieb: >
1 | QObject::connect(picdisplay, SIGNAL(setLabel(QString)), |
2 | label,SLOT(getLabel(QString))); |
setText() von QLabel ist übrigens ein Slot, also kann man sich das schreiben der Funktion getLabel auch sparen:
1 | QObject::connect(picdisplay, SIGNAL(setLabel(const QString&)), |
2 | label,SLOT(setText(const QString&))); |
Mann kann auch ein Signal, z.B. einen button.clicked als Signal per connect re-emittieren..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.