Wie zeichne ich die Kontrolle mit QStyle und mit bestimmten QSS?

Ich versuche ein Kontrollkästchen zu zeichnenQStyledItemDelegate. Ich möchte, dass das Kontrollkästchen nicht im nativen Look gezeichnet wird, sondern mit dem Stil, der mit angegeben wurdeqApp->setStyleSheet(). Ich weiß nicht warum, aber wenn ich Kontrolle mit zieheQStyle::drawPrimitive - Es nimmt kein globales QSS auf.

Gibt es irgendwelche Lösungen, wie man das Kontrollkästchen mit dem Anwendungsstil manuell zeichnet?

Der folgende Code und der folgende Screenshot veranschaulichen mein Problem:

Das erste Kontrollkästchen ist Zeichnen mitQStyle::drawPrimitiveDas zweite Kontrollkästchen ist Widget.

#include <QApplication>
#include <QWidget>
#include <QStyle>
#include <QPainter>
#include <QStyleOptionButton>
#include <QCheckBox>

class TestWindow
    : public QWidget
{
    Q_OBJECT

public:
    TestWindow() {}
    ~TestWindow() {}

    void paintEvent( QPaintEvent * event )
    {
        QPainter p( this );

        QStyleOptionButton opt;
        opt.state |= QStyle::State_On;
        opt.state |= QStyle::State_Enabled;
        opt.rect = QRect( 10, 10, 20, 20 );

        style()->drawPrimitive( QStyle::PE_IndicatorCheckBox, &opt, &p, this );
    }
};

int main( int argc, char *argv[] )
{
    QApplication a( argc, argv );

    a.setStyleSheet( "QCheckBox::indicator{ border: 1px solid red; }" );

    TestWindow w;
    QCheckBox *cb = new QCheckBox( &w );
    cb->move( 10, 30 );

    w.show();

    return a.exec();
}

#include "main.moc"

Hinweis: Es ist möglich, unsichtbare Kontrollkästchen zu erstellen und zu verwendenQPixmap::grabWidget, aber diese Methode ist zu schwer.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage