Mit Painter erzeugte LED in QWIdget öfters verwenden
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08
Mit Painter erzeugte LED in QWIdget öfters verwenden
Hallo miteinander,
ich bins schon wieder ..
ich hab mir nun ne LED mit Beschriftung in ein QWidget gemalt .. dieses Bild möchte ich in meiner GUI mehrmals übereinander einsetzen. Dazu hab ich das bemalte QWIdget einfach mehrmals in ein QVBoxLayout und dann in mein Gui Widget eingefügt, aber egal wie ich es mache, es wird immer an die gleiche Stelle gemalt und ist nur einmal sichtbar.
ISt mir nicht ganz klar, weil es doch lauter einzelne Widgets sind ( und ich hab das mal in Java so gemacht, da hats funktioniert).
Auf jeden Fall sollte ich wohl mit einem QPicture, QPixmap oder sowas arbeiten, hab ich aber auch noch nichts auf die Reihe gebracht.
Kann mir da jemand nen Tyo in die richtige Richtung geben??
Schonmal danke ..
Gruß insercoin
ich bins schon wieder ..
ich hab mir nun ne LED mit Beschriftung in ein QWidget gemalt .. dieses Bild möchte ich in meiner GUI mehrmals übereinander einsetzen. Dazu hab ich das bemalte QWIdget einfach mehrmals in ein QVBoxLayout und dann in mein Gui Widget eingefügt, aber egal wie ich es mache, es wird immer an die gleiche Stelle gemalt und ist nur einmal sichtbar.
ISt mir nicht ganz klar, weil es doch lauter einzelne Widgets sind ( und ich hab das mal in Java so gemacht, da hats funktioniert).
Auf jeden Fall sollte ich wohl mit einem QPicture, QPixmap oder sowas arbeiten, hab ich aber auch noch nichts auf die Reihe gebracht.
Kann mir da jemand nen Tyo in die richtige Richtung geben??
Schonmal danke ..
Gruß insercoin
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Also entweder Du erzeugst ein QImage/QPixmap und stellst es in n QLables dar oder Du erstellst Dir eine eigene Klasse, überschreibst das QPaintEvent und malst dort dein LED.
Was Du aber auf alle Fälle nicht machen kannst, ein und dieselbe Instanz eines QWidgets n-Mal irgendwo unterbringen...
Was Du aber auf alle Fälle nicht machen kannst, ein und dieselbe Instanz eines QWidgets n-Mal irgendwo unterbringen...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08
Ok, ich versuch das hier mal ein bisschen besser darzustellen ..
das ist meine LED Klasse..
Und die wollte ich etwa so einbinden, aber das funktioniert irgendwie nicht ..
Bitte nichts zum Code, bin da gerade am rumbasteln weils nicht funktionieren möchte.. =)
ICh hab auch erst gedacht dass ich vielleicht irgendwie immer die gleiche Instanz reinsetz, aber das müsste doch passen oder??
Auf jeden Fall malt der mir immer nur eine LED, nur entsprechend versetzt wenn ich verschieden viel reinsetz .. hab ich da was übersehen??
das ist meine LED Klasse..
Code: Alles auswählen
/***********/
/* LED.H */
/***********/
#ifndef LED_H
#define LED_H
#include <QWidget>
class LED : public QWidget
{
Q_OBJECT
public:
LED(const char *newText);
QColor *LEDColor;
QString *LEDText;
void setColor(QColor *newColor);
protected:
void paintEvent(QPaintEvent *event);
};
#endif
/*********************************************/
/***********/
/* LED.CPP */
/***********/
#include <QPainter>
#include "led.h"
LED::LED(const char *newText)
{
LEDColor = new QColor(Qt::lightGray);
LEDText = new QString(newText);
}
void LED::paintEvent(QPaintEvent *)
{
QPainter *painter = new QPainter(this);
//Painter in die Mitte links des Widgets setzen.
painter->translate(rect().width()/4, rect().height()/2);
QRadialGradient *radialGradient = new QRadialGradient(0, 0, 60, 0, 0);
radialGradient->setColorAt(0.0, Qt::white);
radialGradient->setColorAt(0.2, *LEDColor);
radialGradient->setColorAt(1.0, Qt::black);
painter->setPen(Qt::NoPen);
painter->setBrush(*radialGradient);
painter->setRenderHint(QPainter::Antialiasing, true);
painter->drawEllipse(QRect(-25, -25, 35, 35));
painter->resetTransform();
painter->translate(rect().width()/2, rect().height()/2);
painter->setPen(Qt::SolidLine);
painter->drawText(0, 0, *LEDText);
}
void LED::setColor(QColor *newColor)
{
LEDColor = newColor;
update();
}
Code: Alles auswählen
LED *led[9];
QGridLayout *gridLayout=new QGridLayout;
QWidget *widget = new QWidget;
for (int i=0;i<9;i++)
{
led[i]=new LED("dfef");
gridLayout->addWidget(led[i],i,1);
widget->setLayout(gridLayout);
}
ICh hab auch erst gedacht dass ich vielleicht irgendwie immer die gleiche Instanz reinsetz, aber das müsste doch passen oder??
Auf jeden Fall malt der mir immer nur eine LED, nur entsprechend versetzt wenn ich verschieden viel reinsetz .. hab ich da was übersehen??
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08
Ich habs nun so probiert, meine LED Klasse ist ein QLabel. ICh mal alles in ein QPixmap und setz das dann ins Label .. aber wenn ich das Label anzeige, seh ich gar nichts .. ich hab langsam keine Idee mehr ..
schließlich versuch ichs in meiner main mit
anzuzeigen, aber nichts !!
sieht jemand den fehler den ich hier mach, geht das so überhaupt??
Code: Alles auswählen
void LED::paintEvent(QPaintEvent * event)
{
pixmap = new QPixmap();
QPainter *painter = new QPainter(pixmap);
//Painter in die Mitte links des Widgets setzen.
painter->translate(rect().width()/4, rect().height()/2);
QRadialGradient *radialGradient = new QRadialGradient(0, 0, 60, 0, 0);
radialGradient->setColorAt(0.0, Qt::white);
radialGradient->setColorAt(0.2, *LEDColor);
radialGradient->setColorAt(1.0, Qt::black);
painter->setPen(Qt::NoPen);
painter->setBrush(*radialGradient);
painter->setRenderHint(QPainter::Antialiasing, true);
painter->drawEllipse(QRect(-25, -25, 35, 35));
painter->resetTransform();
painter->translate(rect().width()/2, rect().height()/2);
painter->setPen(Qt::SolidLine);
painter->drawText(0, 0, *LEDText);
this->setPixmap(*pixmap);
}
Code: Alles auswählen
LED test("irgendwas");
test.show();
sieht jemand den fehler den ich hier mach, geht das so überhaupt??
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08
wieso baust du alles nochmal um wenns schon funktioniert hat?
nimm doch einfach das
aus der for schleife und bau es darunter ein. Das sollte schon reichen und die Widgets untereinander anzeigen.
mfg
CAD
nimm doch einfach das
Code: Alles auswählen
widget->setLayout(gridLayout);
mfg
CAD
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08
das ist ja das problem, es funtioniert nicht..
selbst wenn ich 1000 instanzen von dem bemalten widget in ein layout packe .. malt er mir nur eins rein, ich denk mal dass die LED trotz der unterschiedlichen WIdgets immer an die gleiche Stelle im Bildschirm gemalt wird ..
deshalb hab ich verscuht es über QPixmap -> QLAbel zu lösen, aber dann zeigt er mir ja gar nichts mehr an ..
gibt es niemand der viellecith mal was ähnliches realisiert hat, und ein beispiel für mich hätte ???
selbst wenn ich 1000 instanzen von dem bemalten widget in ein layout packe .. malt er mir nur eins rein, ich denk mal dass die LED trotz der unterschiedlichen WIdgets immer an die gleiche Stelle im Bildschirm gemalt wird ..
deshalb hab ich verscuht es über QPixmap -> QLAbel zu lösen, aber dann zeigt er mir ja gar nichts mehr an ..
gibt es niemand der viellecith mal was ähnliches realisiert hat, und ein beispiel für mich hätte ???
-
insertcoin
- Beiträge: 54
- Registriert: 19. Mai 2008 13:08