首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QStyle和指定的QSS绘制控件?

如何使用QStyle和指定的QSS绘制控件?
EN

Stack Overflow用户
提问于 2013-10-02 13:30:47
回答 2查看 3.8K关注 0票数 1

我正试图在QStyledItemDelegate中绘制一个复选框。我希望复选框不是用本机外观绘制,而是用qApp->setStyleSheet()指定的样式绘制。我不知道为什么,但当我用QStyle::drawPrimitive进行控制时,它不会获得全球qss。

是否有任何解决方案,如何用应用程序样式手动绘制复选框?

下面的代码和屏幕截图演示了我的问题:

第一个复选框是用QStyle::drawPrimitive绘制的,第二个复选框是小部件。

代码语言:javascript
复制
#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,但是这种方法太重了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-02 16:24:42

Qt当前这类绘图的不支持

警告:自定义QStyle子类目前不支持Qt样式表。我们计划在将来的发行版中解决这个问题。

票数 3
EN

Stack Overflow用户

发布于 2015-03-18 12:01:22

代码语言:javascript
复制
QPainter p( this );

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

QCheckBox cb(this); // create fake checkbox

style()->drawPrimitive( QStyle::PE_IndicatorCheckBox, &opt, &p, &cb); // pass a pointer to checkbox instead of "this"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19138100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档