Eigenen Button durch Ableiten von QAbstractButton erstellen?

Alles rund um die Programmierung mit Qt
Antworten
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Eigenen Button durch Ableiten von QAbstractButton erstellen?

Beitrag von Mister_Crac »

Hallo,

ich möchte einen eigene Button-Klasse erzeugen. Deshalb habe ich eine Klasse MyButton von QAbstractButton abgeleitet. Aber beim Kompilieren gibt es einen Fehler, die Methoden show() und resize() werden anscheinend nicht gefunden. Aber ich dachte, dass QAbstractButton die von QWidget erbt und dass die dann auch in meiner Klasse vorhanden sein müssten? Anscheinend habe ich da noch einen Denkfehler. Hier mal mein Code und darunter die Fehlermeldung.

Datei: MyButton.h

Code: Alles auswählen

#ifndef _MYBUTTON
#define _MYBUTTON
#include <QAbstractButton>

class MyButton : public QAbstractButton
{	
	public:
	MyButton(QWidget *parent=0);
	void paintEvent(QPaintEvent*);
};

#endif
Datei: MyButton.cpp

Code: Alles auswählen

#include "MyButton.h"
#include <QtGui>

MyButton::MyButton(QWidget *parent)
    : QAbstractButton()
{
	setCheckable(true);
}

void MyButton::paintEvent(QPaintEvent*)
{
	QPainter painter(this);
	QRect rectangle(88,63,25,25);
	QPen myPen;
	myPen.setWidth(1);
	myPen.setColor(Qt::black);
	painter.setPen(myPen);
	
	if(isChecked())
	{
		painter.setBrush(Qt::blue);
	}
	else
	{
		painter.setBrush(Qt::red);
	}

	painter.drawEllipse(rectangle);
}
Datei: main.cpp

Code: Alles auswählen

#include "MyButton.h"
#include <QApplication>

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

	MyButton button();
	button.resize(200,150);
	button.show();

	return app.exec();
}
Die Fehlermeldung beim Kompilieren lautet:
main.cpp: In function `int qMain(int, char**)':
main.cpp:9: error: request for member `resize' in `button', which is of non-class type `MyButton ()()'
main.cpp:10: error: request for member `show' in `button', which is of non-class type `MyButton ()()'

Kann mich bitte jemand erleuchten? Das wäre sehr fein :-)
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Beitrag von Mister_Crac »

Ah siehe da, ich hab eben was gemerkt. Wenn ich ein Objekt der Klasse MyButton auf dem Heap anlege, also mit new, dann geht es:

Neue Datei main.cpp

Code: Alles auswählen

#include "MyButton.h"
#include <QApplication>

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

	MyButton *button = new MyButton();
	button->resize(200,150);
	button->show();

	return app.exec();
}
Was ich dann aber immer noch nicht verstehe ist, wieso das mit z.B. QPushButton sehr wohl geht. Mit einer Qt-eigenen Klasse würde obiges Beispiel nämlich trotzdem erstmal funktionieren, also ohne new sondern à la "QPushButton button;"
Naja ich sollte mir wohl mal merken, dass man Widget-Objekte immer auf dem Heap anlegt, ne?
Zuletzt geändert von Mister_Crac am 12. Oktober 2006 15:53, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

MyButton button(); 
-->
MyButton button;
So ist es richtig!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Beitrag von Mister_Crac »

Christian81 hat geschrieben:

Code: Alles auswählen

MyButton button(); 
-->
MyButton button;
So ist es richtig!
Äh ja danke. Sorry for being such a noob :oops:

Irgendwas schwirrt mir aber trotzdem im Hinterkopf rum von wegen besser auf dem Heap mit new anlegen...
Antworten