QCheckTableItem::paint();

Alles rund um die Programmierung mit Qt
Antworten
hanso
Beiträge: 9
Registriert: 27. August 2004 10:24

QCheckTableItem::paint();

Beitrag 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() );*/
}
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
Antworten