PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT, eigene Slots in einer Klasse



Linuxexplorer
23-07-2002, 17:51
Hallo

Ich möchte gerne einen eigenen Slot in einer Klasse MyQPushButton definieren.

#include <qpushbutton.h>
#include <qpushbutton.h>
#include <qmessagebox.h>

class MyQPushButton : public QPushButton
{
Q_OBJECT

public slots:

void antwort()
{
QMessageBox::information(0, "Application name","TEST2 QT" );
}

};

Der Compiler meldet mir aber eine Fehler bei der folgenden Codezeile:

MyQPushButton* hello = new MyQPushButton("Beenden durch pressen", test);

MyQPushButton könne nicht 2 Argumente haben!


Wieso geht das nicht ?


MFG: Linuxexplorer

anda_skoa
23-07-2002, 19:30
Das hat nichts mit slots oder Qt zu tun.

Du hast keinen Konstruktor in MyQPushButton definiert, dann existiert nur der Default Konstruktor ohne Argumente und derDefault Copy Konstruktor.

Ciao,
_

Linuxexplorer
24-07-2002, 12:53
Hi

Ja, ist mir im Nachhinein auch Eingefallen.

Gibts es irgend einen Weg, den Konstruktor von QPushButton in meine eigene Klasse MyQPushButton zu übernehmen ? Könnte man ihn irgend wie erben ?

MFG: Linuxexplorer

anda_skoa
24-07-2002, 14:18
Erben geht nicht, wie du ja schon gesehen hast.
Aber leere Konstruktoren zu schreiben ist ja nicht viel Aufwand:



class MyQPushButton : public QPushButton
{
public:
MyPushButton(QWidget* parent, const char* name=0) : QPushButton(parent, name) {};
MyPushButton(const QString& text, QWidget* parent, const char* name=0) : QPushButton(text, parent, name) {};


Ciao,
_

Linuxexplorer
24-07-2002, 17:11
Hi

Vielen Dank für deinen Tipp!

Leider begreife ich deinen Beispielcode nicht ganz.

MyPushButton(QWidget* parent, const char* name=0) : QPushButton(parent, name) {};

So übernimmst du einfach den Konstruktor von QPushButton ? Wie ist denn das mit den Argumenten vom originalen Konstruktor (QPushButton(parent, name)), hast du die einfach ausgewählt ?

MFG: Linuxexplorer

anda_skoa
24-07-2002, 18:22
MyPushButton(QWidget* parent, const char* name=0)


Das deklariert einen Konstrutor mit zwei Argumenten.
Die beiden sind praktisch bei QWidgets immer da, aber ich hab da als Vorlage den ersten Konstruktor von QPushButton aus der Doku genommen.



: QPushButton(parent, name)


Das ist Initialisierungscode. Bedeuten tut es "benutze Konstruktor der Basisklasse QPushButton"
parent und name sind die beiden Argumente von MyPushButton(QWidget* parent, const char* name(.
Sie werden also "weitergeleitet"



{}


Bedeutet, dass weiter nichts gemacht wird. Der Konstruktor hat einen leeren Body.

Alles nach dem Doppelpunkt kann auch im cpp File stehen. Das ist immer dann anzuraten, wenn der Body länger als ein/zwei Zeilen ist.



MyPushButton::MyPushButton(QWidget* p, const char* name) : QPushButton(p, name)
{
}


Im h File stünde dann nur mehr


MyPushButton(QWidget* p, const char* name=0);


Alle Klarheiten erfolgreich beseitigt? ;)

Ciao,
_