Seite 1 von 1
Frage bzgl. style von QProgressBar in einem Delegate
Verfasst: 5. Oktober 2010 08:55
von tribari
Hallo allerseits,
ich stehe mal wieder vor einem Problem und benötige ein paar Tips wo evtl. mein Fehler liegen könnte
Und zwar habe ich mir ein QItemDelegate erstellt welches entsprechend des Inhaltes eine QProgressBar anzeigen soll...
soweit so gut - dies klappt auch wunderbar!
Mein Problem liegt eher darin, dass mein Programm einen selbsterstellten Stylesheet verwendet und dieser nicht vom der ProgressBar im Delegate übernommen wird...
Der Delegate zeichnet mir eine "normal" graue progressBar.... wenn ich jedoch selbst QProgressBar Objekte auf meiner Oberfläche anlege werden diese halt farblich aufgepeppt angezeigt.
Wie bekomme ich es hin, dass die ProgressBar im Delegate den gleichen Stylesheet verwendet wie das restliche Programm?
Danke für die Hilfe im Voraus
Tribari
Verfasst: 5. Oktober 2010 09:04
von upsala
Wie zeichnest du deine ProgressBar, bzw. wo hast du den style() her?
Verfasst: 5. Oktober 2010 09:14
von tribari
Das Zeichnen mache ich wie folgt:
Code: Alles auswählen
void ProgressbarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if( index.column() == qobject_cast<const SoftwareObjectModel*>(index.model())->getProgressbarColumn() )
{
SoftwareObjectModel * model = (SoftwareObjectModel*) index.model();
if ( model == 0 )
{
QStyledItemDelegate::paint(painter, option, index);
return;
}
QStyleOptionProgressBarV2 opts;
SoftwareObject * pItem = model->getItem(index.row());
if ( pItem != 0 )
{
bool bDrawProgressBar = false;
switch (pItem->getCurrentstate() )
{
case SoftwareObject::Working:
bDrawProgressBar = true;
break;
default:
break;
}
if ( bDrawProgressBar ) {
opts.text = QString ("%1%").arg(pItem->getProgress());
opts.maximum = 100;
opts.minimum = 0;
opts.progress = pItem->getProgress();
opts.rect = option.rect;
opts.rect.setRight(option.rect.right()-1);
opts.rect.setHeight(option.rect.height()-1);
opts.textVisible = true;
opts.textAlignment = Qt::AlignCenter;
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &opts, painter);
return;
}
}
}
QStyledItemDelegate::paint(painter, option, index);
}
Den Stylesheet habe ich selbst erstellt über den QDesigner im QMainWindow. Der Stylesheet müsste somit auf alle QProgressBar Objekte innerhalb des QMainWindows Auswirkungen haben. Da habe ich explizit den Style für QProgressBar gesetzt.
Trotzdem ist das im Delegate anders.
Verfasst: 5. Oktober 2010 09:36
von franzf
tribari hat geschrieben:Der Stylesheet müsste somit auf alle QProgressBar Objekte innerhalb des QMainWindows Auswirkungen haben. Da habe ich explizit den Style für QProgressBar gesetzt.
Trotzdem ist das im Delegate anders.
Auf Progressbar-(Child)Objekte - ja. Du hast hier nur keines! Du nutzt nur den style, um das Element zu zeichnen.
Versuch mal, das StyleSheet im Code für deine QApplication zu setzen. Du kannst auch erstmal das StyleSheet abspeichern und deine Application mit entsprechender CMD-Line-Opt "-stylesheet" starten (siehe QApplication::styleSheet-Property).
Verfasst: 5. Oktober 2010 10:01
von tribari
Sorry das hat auch noch nicht geklappt.
Ich wüsste gerne für welches Element ich in diesem Fall den Style erstellen soll.
für die QProgressBar mach ich ja einfach folgendes:
(vereinfacht)