Seite 1 von 1

QPainter auf QWidget im QTabWidget

Verfasst: 12. September 2004 11:37
von dekan
hey leuts,

ich hab ein bisher unlösbares problem beim zeichnen in widgets. aber erstmal bis dahin:

ich hab ne gui gebastelt, in der später gezeichnet werden soll. dazu macht man vorher nen anderes fenster auf, und gibt dort neben vielen anderen einstellungen die anzahl der TabWidgets an. ist die anzahl eingegeben, wird der arbeitsbereich der "main gui" aktualisiert und die tabs erzeugt. in jedem muss nun ein weisser hintergrund entstehen, in dem gezeichnet werden soll. bis dahin funktioniert alles. aber das zeichnen bekomme ich ums verrecken nicht hin. der code des erzeugens mit dem zeichnen sieht so aus:

Code: Alles auswählen

for( int i = 0; i < tabs.count(); i++) {
QWidget *tempWidget = new QWidget( TabWidget, "widget") //TabWidget->ist das TabWidget und wird im Konstruktor angelegt
tempWidget->setPaletteBackgroundColor( QColor(255,255,255));

//testweise etwas schreiben
QPainter *paint = new QPainter( tempWidget, "painter" );
paint->setPen( QT::black );
paint->drawText( rect(), AlignCenter, "TEXT" );

//Widget dem TabWidget hinzufühen
TabWidget->addWidget( tempWidget, "TheName" );

}
der code wird in einer methode aufgerufen. das hauptproblem ist, das in den frames nichts gezeichnet wird. vielleicht hat einer mit so etwas schonmal gearbeitet und hat eventuell ne lösung parat :)

thx in advance..

dekan

Verfasst: 12. September 2004 12:02
von miketech
Hi,

hast Du mal die show-Methode aufgerufen des Widgets?

Mike

Verfasst: 12. September 2004 12:22
von dekan
nope. hatte mich bei dem code son bissel an das gehalten, was der designer so raushaut und das dann für mich umgebaut. praktisch nen feld von tabs erzeugen und das in ne schleife gepackt. den weissen frame/widget zeigt er ja auch. nur nicht das vom painter... :roll:

Malen ist Privatsache

Verfasst: 24. September 2004 11:33
von cooles_blech
Hi,
das Zeichnen übernimmt jedes Widget für sich selbst. Es wird ein Inhalt immer wieder neu gezeichnet und nicht nur einmalig beim Erstellen des Objekts. Beim Verschieben, Skalieren, Wiederherstellen etc., also besitzt jedes Widget seine paint-Methode. Du solltest eine Klasse "MyTabSheet" schreiben, die von QWidget erbt. Dann solltest du die Methode paint übeschreiben und darin QPainter( this, "MalMich" ) benutzen. Schau mal das Beispiel 'themes' von Qt an.

Grüße

Mike

Verfasst: 29. September 2004 12:12
von matscho
hallo,


hast du ein Paintevent eingefügt?
das paint event ist grundsätzlich dafür verantwortlich für die grafische darlegung.

void MyTab::paintEvent( QPaintEvent * )
{
bitBlt(this,0,0,qpixmap);

}

hoffe das das kein quatsch ist :roll:
mfg

Verfasst: 29. September 2004 12:19
von dekan
jup. habs nun nach euren hilfen nachgebaut. hab ne klasse MyTabContent, die vom qwidget abgeleitet ist, das kommt in jeden tab rein und darin ist dann auch das paintEvent. so gehts problemlos: content wird für jedes widget beim umschalten der tabs gemalt, repaint beim scrollen im widget klappt auch super.

thx 4 your backup! :D

dekan