Frage bzgl. style von QProgressBar in einem Delegate

Alles rund um die Programmierung mit Qt
Antworten
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Frage bzgl. style von QProgressBar in einem Delegate

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wie zeichnest du deine ProgressBar, bzw. wo hast du den style() her?
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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).
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

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

Code: Alles auswählen

QProgressBar {color:white; background-color:black;}
(vereinfacht)
Antworten