QPushButton mit Signal verbinden und andere Fragen

Alles rund um die Programmierung mit Qt
Antworten
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

QPushButton mit Signal verbinden und andere Fragen

Beitrag von Bang-Johansen »

Hallo Forenmitglieder,

dies ist hier mein erster Beitrag.
Ich bin Anfänger im Programmieren mit QT.
Bisher habe ich in C hauptsächlich Mikrocontroller und ein wenig unter Linux
programiert.
Jetzt benötige ich allerdings eine grafische Anwendung für mein privates Projekt.
Dabei bin ich auf einige Probleme gestoßen.

Zur Verfügung habe ich folgende QT Bücher:

- Das QT Buch (QT3.2)
- GUI Programmierung mit QT3

Allerdings sind zwischen QT3 und QT4 solche Unterschiede,so daß ich mit den
Büchern nur bedingt was anfangen kann.
Daher lese ich hauptsächlich Infos in Foren und Quellen.

Das ist schon meine erste Frage.

Warum gibt es solche großen Unterschiede zwischen QT3 und QT4 ?
(jedenfalls bei den ganzen Widget)

Dasweitern habe ich ein Problem mit einem kleinen Testprogramm.
Ich möchte beim Anklicken einer Schaltfläche ein C Programm
ausführen. Kompilieren läßt es sich, beim Aufruf erhalte ich jedoch den
Hinweis "Object::connect: No such slot QMainWindow::senden()"
Ich denke mal, ich bekomme keinen Zugriff auf meine Methode

Vielleicht wäre jemand mal so freundlich, und würde drüberschauen.

main.cpp
------------------------
#include "test.h"
#include <QDesktopWidget>
#include <QApplication>



int main(int argc, char *argv[])
{
QApplication app(argc, argv);

Test window;

window.setWindowTitle("Test");
window.setGeometry(10, 10, 1024, 768);
window.show();

return app.exec();
}

---------------------
test.cpp
--------------------

#include "test.h"
#include <QMenu>
#include <QMenuBar>
#include <QApplication>
#include <QMessageBox>
#include <iostream>



Test::Test(QWidget *parent)
: QMainWindow(parent)
{

// Schaltflächen erzeugen
QPushButton *ende = new QPushButton("Ende", this);
ende->setGeometry(50, 40, 90, 30);
QPushButton *start = new QPushButton("Start", this);
start->setGeometry(200, 40, 90, 30);


connect(ende, SIGNAL(pressed()), qApp, SLOT(quit()));
connect(start, SIGNAL(pressed()), this, SLOT(senden()));
}

void Test::senden(bool iftoogled)
{
if (iftoogled)
{
// irgendein Code
}

}
---------

test.h

---------

#ifndef TEST_H
#define TEST_H

#include <QMainWindow>
#include <QPushButton>
#include <QRadioButton>
#include <QLabel>
#include <QVBoxLayout>

class Test : public QMainWindow
{
public:
Test(QWidget *parent = 0);
//QPushButton *taste;
QLabel* label;
QVBoxLayout* layout;
public slots:
void senden(bool status);

};

#endif

---------------

Kann man das so programmieren, oder gibt es eine bessere Lösung für
die Aufgabenstellung ??

Desweiteren ist mir aufgefallen, daß einige Programmierer in den .h Dateinen
innerhalb der Klasse keine Variablen u.s.w. deklarieren, sondern das alles
im Konstruktor machen.
Ist das eine gute Lösung, oder soolte man das ncit machen ?

Vielen Dank für Eure Hilfe

Bang Johansen
Dateianhänge
main.cpp
(275 Bytes) 148-mal heruntergeladen
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

1. Qt3 solltest Du gleich vergessen und mit Qt4 anfangen. Qt5 steht schon vor der Tür...
2. Q_OBJECT im Header vergessen --> http://doc.qt.nokia.com/4.7/qobject.html#Q_OBJECT
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Hallo!

uii.. so viele Fragen :wink:
Allerdings sind zwischen QT3 und QT4 solche Unterschiede,so daß ich mit den
Büchern nur bedingt was anfangen kann.
Daher lese ich hauptsächlich Infos in Foren und Quellen.
Vergiss die Qt3-Bücher..
Folge besser den Beispielen und Tutorials der Online-Doku:
http://doc.trolltech.com/4.7/tutorials.html

Recht gut finde ich übrigens das aufbauende Tutorial von Qt4.3:
http://doc.qt.nokia.com/4.3/tutorial.html
Warum gibt es solche großen Unterschiede zwischen QT3 und QT4 ?
(jedenfalls bei den ganzen Widget)
Erwartest du da ernsthaft eine Antwort...? Wäre es denn nicht schade, wenn sich die Informatik nicht weiterentwickeln würde...? :wink
Kompilieren läßt es sich, beim Aufruf erhalte ich jedoch den
Hinweis "Object::connect: No such slot QMainWindow::senden()"
Ich denke mal, ich bekomme keinen Zugriff auf meine Methode
Du hast ein typischer Anfängerfehler drin.. Die Lösung wird gleich unter
http://doc.qt.nokia.com/latest/signalsa ... ll-example
beschrieben...
Desweiteren ist mir aufgefallen, daß einige Programmierer in den .h Dateinen
innerhalb der Klasse keine Variablen u.s.w. deklarieren, sondern das alles
im Konstruktor machen.
Ist das eine gute Lösung, oder soolte man das ncit machen ?
Ich bin mir nicht sicher, was genau du meinst, denn im CTor werden keine Variabeln deklariert, sondern nur initialisiert. Ein C++-Kurs an dieser Stelle ist natürlich nicht möglich... ich würde allenfalls empfehlen, dich mal noch speziell mit C++ und OOP zu beschäftigen...

hth!
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Beitrag von Bang-Johansen »

Hallo,

danke für Eure Antworten.

Dann kann ich ja meine QT3 Bücher vergessen.
Ich werde mich erstmal durch Eure Links durcharbeiten.

Ich war eben etwas "verwundert" das zwischen den Versione solche
Unterschiede bestehen.

Mit C++ hatte ich bisher nicht viel zu tun.Meine C++ Bücher vermittel zwar C++,
aber in Verbindung mit QT sind doch einige Fragen offen.


Bang-Johansen
Antworten