Slot Verknüpfung geht nicht

Alles rund um die Programmierung mit Qt
Antworten
derhandwerk
Beiträge: 7
Registriert: 28. Juli 2005 13:42

Slot Verknüpfung geht nicht

Beitrag von derhandwerk »

Hallo,

ich hab vor kurzem angefangen mich mit Qt zu beschäftigen und hänge nun ein einem recht einfachen Sachverhalt: Ich habe zwei Eingabefelder (QLineEdit) und einen Knopf (QPushButton) und möchte nun ber Knopfdruch den Textinhalt des einen Feldes in das andere Kopieren.

Hier mein erster Versuch:

Code: Alles auswählen

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <qapplication.h>
#include <qpushbutton.h>
#include <qlineedit.h>

int main(int argc, char *argv[])
{
   QApplication test1(argc, argv);
	
   //Hauptwidget erzeugen
   QWidget* Hauptwidget = new QWidget();
   Hauptwidget->setGeometry(100,100,200,200);
	
   //Button erzeugen
   QPushButton* Knopf = new QPushButton("test", Hauptwidget);
   Knopf->setGeometry(20,60,160,20);
	
   //Eingabebox erzeugen
   QLineEdit* Eingabebox = new QLineEdit(Hauptwidget);
   Eingabebox->setGeometry(20,20,160,20);
	
   //Ausgabebox erzeugen
   QLineEdit* Ausgabebox = new QLineEdit(Hauptwidget);
   Ausgabebox->setGeometry(20,100,160,20);

   //Inhalt kopieren 
   QObject::connect(Knopf, SIGNAL(clicked()), Ausgabebox, SLOT(setText(Eingabebox->text())));
	
   //Programm initialisieren
   test1.setMainWidget(Hauptwidget);
   Hauptwidget->show();
   return test1.exec();
}
Wenn das Programm nun starte bekomme ich diesen Output:

Code: Alles auswählen

QObject::connect: No such slot QLineEdit::setText(Eingabebox->text())
QObject::connect: (sender name: 'unnamed')
QObject::connect: (reciever name: 'unnamed')
Nach längerem googeln bin ich zu der Erkenntnis gekommen das es eventuell mit einem neuen Slot geht, jedoch weis ich nicht wie das geht. Ich wüste auch gerne, warum dies so "umständlich" gemacht ist (zumindest in meinen Augen, da ich es noch nicht vollständig hinterschaut habe).
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Du versucht innerhalb einer SIGNAL -> SLOT Verbindung Daten in einen nicht vorhandenen Slot zu übergeben.

bei SIGNAL( clicked() ) wird der SLOT ausgeführt mit den Daten, die im Signal übergeben werden, bei clicked() werden keine Daten übergeben, also schon ein kleiner Denkfehler.

Des weiteren muss der SLOT auch definiert sein und in den meisten Fällen zu dem SIGNAL passen, also auch ohne Übergabeparameter sein. Es gibt ausnahmen, aber das wäre nun zu komplex.

wenn du einen SLOT definierst (im Header), z.B.
private slots:
void setText();

Dann kann dein SLOT z.B. so aussehen:
void MeineKlasse::setText() {

Knopf -> setText( Eingabebox->text() );
}

Damit würde jedes mal, wenn du den Knopf klickst sich der Text der Eingabebox anzeigen.

Wenn du SIGNAL und SLOT's benutzt musst du das Q_OBJECT Macro definieren, damit Qt eine moc Datei erzeugen kann, die die Verknüpfungen dann schlussendlich realisiert.

Ich empfehle die Dringend erstmal die Beispiele von Qt nach zubauen und ein wenig mehr mit SIGNAL / SLOT zu arbeiten, bevor du eigenständigen Code versuchst.

Nachtrag: Bitte ein wenig prägnantere Titel wählen.
Antworten