Seite 1 von 1

QCheckTableItem::paint();

Verfasst: 14. Dezember 2004 09:38
von hanso
Um die CheckTableItems in meiner Tabelle zu zentrieren schreibe ich die paint() funktion der QCheckTableItem Klasse neu. Leider klappt das nicht so recht, denn die Items verändern sich und die CheckBox ist nicht mehr zentriert sobald das entsprechende Tabellenfeld indem sich das Item befindet angeklickt wird.

Code: Alles auswählen

void ModulesTableItem::paint( QPainter * p, const QColorGroup & cg, const QRect & cr, bool selected ){
   p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Highlight ) );

   int w = cr.width();
   int h = cr.height();
   QSize sz = QSize( table()->style().pixelMetric( QStyle::PM_IndicatorWidth ),
		   table()->style().pixelMetric( QStyle::PM_IndicatorHeight ) );
   QColorGroup c( cg );
   c.setBrush( QColorGroup::Background, c.brush( QColorGroup::Base ) );
   QStyle::SFlags flags = QStyle::Style_Default;
   if(isEnabled())
      flags |= QStyle::Style_Enabled;
   if ( this->isChecked() )
      flags |= QStyle::Style_On;
   else
      flags |= QStyle::Style_Off;
   if ( isEnabled() && table()->isEnabled() )
      flags |= QStyle::Style_Enabled;

   table()->style().drawPrimitive( QStyle::PE_Indicator, p,
			    QRect( 40, ( h - sz.height() ) / 2, sz.width(), sz.height() ), c, flags );
   int x = sz.width() + 6;
   w = w - x;
   /*    if ( selected )
   p->setPen( cg.highlightedText() );
   else
   p->setPen( cg.text() );
   p->drawText( x, 0, w, h, wordWrap() ? ( alignment() | WordBreak ) : alignment(), text() );*/
}

Verfasst: 14. Dezember 2004 21:52
von ArneStocker
hallo Hanso

... also bei editierbaren QComboBox ist zum Beispiel auch noch ein QLineEdit Bestandteil des Widget. Wenn ich mich recht erinnere ist das auch bei editierbaren QTableItems der Fall.

Möglicherweise wird in dem Augenblick in dem das Item den Focus erhält das integrierte QLineEdit dargestellt, mit der Folge, dass Dein ..::paint(..) nichts mehr mit der Darstellung zu tun hat. Vielleicht lässt sich das Problem umgehen, wenn Du auch ein QLineEdit ableitest und als Eingabefeld mit dem TableItem verbindest. Meines Erachtens wird das sogar irgendwo in der Doku beschrieben

Gruss Arne