Seite 1 von 1

Klickbares Label

Verfasst: 15. August 2008 10:34
von Label
Hallo,

ich habe mir eine Klasse geschrieben die von QLabel und von QPushButton erbt damit ich mir ein klickbares Bild anzeigen lassen kann. Das Problem ist, sobald ich eine Funktion dieser Klasse Aufrufe welche in beiden Basisklassen (QLabel und QPushButton) vorkommt, bekomme ich einen Fehler
z.B. :

Code: Alles auswählen

Button *show_info = new Button(parameter, this);
	show_info->show();
Fehler: "Abfrage des Elements >>show<< ist mehrdeutig

Ich denke es liegt daran das QLabel und QPushButton von QWidgets abgeleitet sind

Jetzt meine Frage: kennt jemand einen Weg diesen Fehler zu umgehen oder eine andere Möglichkeit einen klickbaren Knopf mit eigenem Design zu realisieren?

Danke im Voraus, Label

Verfasst: 15. August 2008 11:18
von pfid
Wieso setzt du nicht einfach auf einen Button ein entsprechendes Bild?

Verfasst: 15. August 2008 11:30
von Label
öhm ... ich muss dazu sagen ich arbeite mich gerade erst in Qt ein ...
wenn du mir sagst wie ich das anstellen kann probier ich es mal aus :)
(am besten mit Code-Beispiel)

Verfasst: 15. August 2008 15:36
von dontinelli
Oder noch besser ein Link zur Doku: http://doc.trolltech.com/4.4/qabstractb ... #icon-prop

Verfasst: 15. August 2008 16:28
von -=Freaky=-
ich weiss nicht, inwiefern diese loesung einfach/kompliziert/sinnvoll/sinnlos ist, aber so in etwa funktioniert es (muss natuerlich ggf. noch etwas ausgebaut werden).

imgButton.h

Code: Alles auswählen

#ifndef __IMG_BUTTON_H_
#define __IMG_BUTTON_H_

#include <QAbstractButton>
#include <QPixmap>
#include <QPaintEvent>
#include <QPainter>

class ImgButton: public QAbstractButton
{
	public:
		ImgButton( const QString &p_img, QWidget *parent = 0 );
		virtual void paintEvent( QPaintEvent *event );
		
	private:
		QPixmap pm;
};

#endif
imgButton.cpp

Code: Alles auswählen

#include "imgButton.h"

ImgButton::ImgButton( const QString &p_img, QWidget *parent )
:QAbstractButton( parent )
{
	pm = QPixmap( p_img );
}

void ImgButton::paintEvent( QPaintEvent *event )
{
	QPainter painter;
	if( painter.begin( this ) )
	{
		painter.drawPixmap( event->rect(), pm, QRectF( 0.0, 0.0, pm.width(), pm.height() ) );
		painter.end();
	}
}
mfg,
julian