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"); }