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!
Gast
#4541130
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...
Gast
#4541235
(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
Gast
#4541308
> 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.
Gast
#4541384
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.
Gast
#4542062
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 :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.