2017-10-09 5 views
0

J'essaye de créer un bouton vertical. J'ai suivi les options de style mentionnées dans 1 et 2. Mais je ne vois aucun texte visible sur le bouton.Qt VerticalButton drawControl ne dessine pas Texte

class VerticalPushButton : public QPushButton{ 
    public: 
    VerticalPushButton(QWidget* parent=0x0); 
    VerticalPushButton(const QString& text, QWidget* parent=0x0); 
    VerticalPushButton(const QIcon& icon, const QString& text, QWidget* parent=0x0); 
    virtual QSize sizeHint() const; 
    virtual QSize minimumSizeHint() const; 
    protected: 
    virtual void paintEvent(QPaintEvent* event); 
    private: 
    QStyleOption styleOptions() const; 
}; 
VerticalPushButton::VerticalPushButton(QWidget* parent): QPushButton(parent){ 
    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); 
} 

VerticalPushButton::VerticalPushButton(const QString& text, QWidget* parent): QPushButton(text, parent){ 
    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); 
} 

VerticalPushButton::VerticalPushButton(const QIcon& icon, const QString& text, QWidget* parent): QPushButton(icon, text, parent){ 
    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); 
} 

QSize VerticalPushButton::sizeHint() const{ 
    QSize size = QPushButton::sizeHint(); 
    size.transpose(); 
    return size; 
} 

QSize VerticalPushButton::minimumSizeHint() const{ 
    QSize size = QPushButton::minimumSizeHint(); 
    size.transpose(); 
    return size; 
} 

void VerticalPushButton::paintEvent(QPaintEvent* event){ 
    QStylePainter painter(this); 
    painter.rotate(90); 
    painter.translate(0, -width()); 
    painter.drawControl(QStyle::CE_PushButton, styleOptions()); 
} 

QStyleOption VerticalPushButton::styleOptions() const{ 
    QStyleOptionButton options; 
    options.initFrom(this); 
    QSize size = options.rect.size(); 
    size.transpose(); 
    options.rect.setSize(size); 
    options.features = QStyleOptionButton::None; 

    if(isFlat())            options.features |= QStyleOptionButton::Flat; 
    if(menu())            options.features |= QStyleOptionButton::HasMenu; 
    if(autoDefault() || isDefault())       options.features |= QStyleOptionButton::AutoDefaultButton; 
    if(isDefault())           options.features |= QStyleOptionButton::DefaultButton; 
    if(isDown() || (menu() && menu()->isVisible()))   options.state |= QStyle::State_Sunken; 
    if(isChecked())           options.state |= QStyle::State_On; 
    if(!isFlat() && (!isDown()))        options.state |= QStyle::State_Raised; 

    options.palette = palette(); 

    options.text = text(); 
    options.icon = icon(); 
    options.iconSize = iconSize(); 
    return options; 
} 

Répondre

0

changement QStyleOption styleOptions() const; dans QStyleOptionButton styleOptions() const ;

+0

Ce fut une erreur stupide, Merci –