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::drawPrimitive
Das 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.