QT Slot erstellen



  • Hi,

    ich arbeite mich grad in QT ein und möchte ein ganz einfaches Beispiel erstellen. Ich möchte ein Fenster mit einem Button und einem Edit-Feld haben und beim drücken auf den Butto soll ein Text in das Edit-Feld geschrieben werden. Und zum Erstellen möchte ich den Designer verwenden.

    Soweit so gut. Ich hab jetzt im Designer die beiden Elemente in das Fenster gezogen und im Klassen-Header einen Slot deklariert:

    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    
    public slots:
        void showOutput();
    };
    

    Jetzt kann ich aber im Designer das clicked-Signal nicht mit meinem showOutput-Slot verbinden, weil der unter den MainWindow-Slots nicht angezeigt wird. Außerdem ist ja nirgends das Edit-Feld deklariert, sodass ich ja darauf nicht zugreifen kann, oder?

    Ist das die falsche Herangehensweise?

    Gruß, Heimchen



  • Wenn du im Designer im Signal/Slot-Edit-Modus bist kannst du beim erstellen der Verbindung ein zusätzlichen Slot/Signal hinzufügen ( wichtig ist halt das dieser existiert )

    Ansonsten kannst du das auch manuell machen mit :

    connect(ui->deinButton,SIGNAL(clicked()),this,SLOT(showOutput()));
    
    ...
    
    void MainWindow::showOutput()
    {
      ui->deinLineEdit->setText("foobarbaz");
    }
    


  • Ich wollte mich so weit wie möglich an den Designer halten und das da machen. Aber genau dort (wenn ich eine neue Verbindung hinzufüge) taucht in der Slot-Auswahlliste mein eigens erstellter Slot nicht auf.

    Wenn ich nicht den Designer verwende, wo erstelle ich denn sinnvollerweise meine GUI-Elemente und die Verbindungen? Direkt im Konstruktor? Und sind die GUI-Elemente immer Klassenmember? Kann ich die auch statisch anlegen, also nicht als Pointer?



  • Einfach einen Button und ein Edit-feld auf dein Formular ziehen.
    Dann mit der rechten Maustaste auf den Button -> Slots anzeigen.

    ->clicked()

    Dann kannst du loslegen:

    void MainWindow::on_pushButton_clicked()
    {
        ui->lineEdit->setText("Blah... Ein text");
    }
    

Anmelden zum Antworten