QPushButton mit Signal verbinden und andere Fragen
Verfasst: 12. Juli 2011 18:44
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
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