Как нарисовать контроль с QStyle и с указанным QSS?
Я пытаюсь нарисовать флажок вQStyledItemDelegate
, Я хочу, чтобы флажок отображался не с собственным видом, а со стилем, который указанqApp->setStyleSheet()
, Я не знаю почему, но когда я рисую контроль сQStyle::drawPrimitive
- это не поднимает глобальный QSS.
Есть какие-то решения, как вручную нарисовать флажок со стилем приложения?
Следующий код и скриншот демонстрируют мою проблему:
Первый флажок - ничья сQStyle::drawPrimitive
Второй флажок виджет.
#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"
Примечание: можно создать невидимый флажок и использоватьQPixmap::grabWidget
, но этот метод слишком тяжелый.