Hallo zusammen! Könnte mir vielleicht jemand mal erläutern, wie ich den Befehl "void xxx::on_pushButton_clicked()" richtig benutze? Der Plan ist, beim Klicken des Buttons eine Verbindung zu einer seriellen Schnittstelle herzustellen. Hatte es so mal versucht, void com_2::on_pushButton_6_clicked(QPushButton *event1) { if(QPushButton::clicked()) { event1->accept(); QSerialPort serial; serial.setPortName("COM3"); serial.setBaudRate(QSerialPort::Baud9600); serial.setDataBits(QSerialPort::Data8); serial.setStopBits(QSerialPort::TwoStop); serial.setParity(QSerialPort::NoParity); serial.setFlowControl(QSerialPort::NoFlowControl); serial.open(QIODevice::ReadWrite); } else { event1->ignore(); } } allerdings kommt dasnn folgende Fehlermeldung: Fehler: cannot call member function 'void QAbstractButton::clicked(bool)' without object if(QPushButton::clicked()) ^ Im Voraus schonmal danke!
Woher soll der Compiler wissen, welchen QPushButton du abfragen möchtest? Unten benutzt du event1->accept(). Warum nicht auch event1->clicked() ?
Wo und wie genau meinst du das jetzt? als bedingung für die if-Schleife oder in der Schleife selbst? ich weiß nicht, ob meine Programm-Struktur für mein Vorhaben überhaupt richig ist...
(Ich gehe davon aus, du willst einen Toggle-Button, den man mit einem Klick anschaltet, und mit dem nächsten Klick wieder ausschaltet, korrekt?) Schritt 1: Gib der Methode einen vernünftigen Namen: void MeinObject::open_or_close_serial_connection(bool requestedState) Schritt 2: Definiere (klickibunti) im Designer, dass dein Button beim Drücken diese Funktion (Slot) aufrufen soll, in dem du das SIGNAL clicked(bool checked = false) mit deinem SLOT verbindest.
zu Qt gibt es sehr ausführliche Beispiele und auch Tutorials. Da wird die erforderliche Programmstruktur gut erklärt. Nur so als Beispiel: https://qtvon0auf100.wordpress.com/ Oliver
> als bedingung für die if-Schleife oder in der Schleife selbst? Überall. Dieses Problem hat mit Qt nichts zu tun. Ist ein reines C++ Problem. - Statische Methoden rufst du mit Klassennname::Methodenname() auf. - Normale Methoden mit Variable.Methodenname() bzw. Zeiger->Methodenname() > ich weiß nicht Nicht so wild. Wenn du dir zu viel auf einmal vorgenommen hast, mach es halt in mehreren Schritten. Erst mal ein paar Tutorials durcharbeiten, danach die Struktur für dein Programm entwerfen.
David S. schrieb: > Könnte mir vielleicht jemand mal erläutern, wie ich den Befehl > > "void xxx::on_pushButton_clicked()" > > richtig benutze? https://de.wikibooks.org/wiki/Qt_f%C3%BCr_C%2B%2B_Anf%C3%A4nger:_Signale_und_Slots http://doc.qt.io/qt-4.8/signalsandslots.html http://doc.qt.io/qt-5/signalsandslots.html
clicked() ist kein Member den du aufrufen kannst, werder abstrakt noch konkret. Es ist ein Signal. Lies die Doku, das ist wirklich überall gut erklärt.
David S. schrieb: > als bedingung für die if-Schleife oder in der Schleife selbst? Und natürlich zu guter Letzt wirf bitte einen Blick auf http://www.if-schleife.de/
Hast du die Funktion selber angelegt und machst es über connect? Oder hast du es über den Designer erstellen lassen (Rechtsklick -> Slot anzeigen) und dort clicked (das Normale ohne bool) ausgewählt? Normalerweise müsste es so aussehen: void com_2::on_pushButton_6_clicked() { QSerialPort serial; serial.setPortName("COM3"); serial.setBaudRate(QSerialPort::Baud9600); serial.setDataBits(QSerialPort::Data8); serial.setStopBits(QSerialPort::TwoStop); serial.setParity(QSerialPort::NoParity); serial.setFlowControl(QSerialPort::NoFlowControl); serial.open(QIODevice::ReadWrite); } Ich würde serial global machen. Du willst ja auch bestimmt drauf zugreifen zum schreiben oder lesen.
Melde mich leider erst nach einer längeren Pause! Vielen Dank Euch, insbesondere Mathias O., habe es hinbekommen :)
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.