2016-11-07 1 views
1

Ich folgte dieser Qt tutorial auf Signale und Steckplätze, einschließlich der Teil, wo Sie die Verbindung löschen Sie automatisch in Qt Designer und geben Sie stattdessen die connect Funktion von Hand in mainwindow.cpp. Ich wollte meinen eigenen Slot machen, wo das Bewegen der QSlider Tutorial eine QLineEdit änderte ich hinzugefügt, so dass ich tat dies:Wie greife ich auf das QLineEdit-Widget zu, das ich zu diesem Qt-Beispiel hinzugefügt habe?

  1. ich ein QLineEdit Widget hinzugefügt namens ‚LineEdit‘ zu meinem „mainwindow.ui“ in QtDesigner.
  2. In der MainWindow Klassendefinition in Hauptfenster.h, fügte ich dies am Ende der Klasse.

    public slots: 
        void changeLineEdit() { 
        ui->lineEdit->setText("Value was changed"); 
    } 
    
  3. Im MainWindow Konstruktor in mainwindow.cpp, habe ich dies: (. ui->horizontalSlider die QSlider im Tutorial gemacht wurde)

    connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), SLOT(changeLineEdit())); 
    

Als ich versuchte, das Projekt zu erstellen, Ich habe 9 Fehler, einer davon ist "Verwendung von undefinierten Typ 'Ui :: MainWindow'". Was habe ich bei dieser Bearbeitung falsch gemacht? Die MainWindow-Klassendefinition hat einen privaten Zeiger Ui::Mainwindow *ui, also dachte ich, dass die Schlitzdefinition auf den ui Zeiger und deshalb das 'lineEdit' Widget zugreifen würde, das dort enthalten wird.

+1

Normalerweise implementieren Sie Ihre Slots in der cpp-Datei. Zumindest tue ich es. *** Verwendung von undefiniertem Typ 'Ui :: MainWindow *** Bedeutet, da Sie es in der Kopfzeile implementiert haben, müssen Sie das Include Ui :: MainWindow in Ihrer Kopfzeile hinzufügen, anstatt nur Ihre cpp-Datei. – drescherjm

+0

@drescherjm Oh, ich habe das vergessen. Ya, ich hatte ein 'UI :: MainWindow' wie im Tutorial deklariert, aber da ich meinen Slot dort definiert habe, musste ich '#include" ui_mainwindow.h "' in diese Header-Datei einfügen, um sie tatsächlich zu initialisieren. Danke, ich werde es nächstes Mal in einer .cpp-Datei implementieren. Ich kann deinen Kommentar als Antwort akzeptieren. – DragonautX

Antwort

1

Wenn Sie Ihren Steckplatz in Ihrer Kopfzeile implementieren, stellen Sie sicher, dass Sie auch die Kopfzeile für UI::MainWindow in Ihrer Kopfzeile für Ihre Klasse enthalten. Normalerweise würde ich stattdessen meine Slots in der cpp Datei implementieren, aber das ist keine Voraussetzung.

Verwandte Themen