2017-10-09 64 views
0

我想創建一個垂直按鈕。我遵循12中提到的樣式選項。但我在按鈕上看不到任何可見的文字。Qt VerticalButton drawControl沒有繪製文本

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; 
} 

回答

0

QStyleOptionButton styleOptions() const ;

+0

這是一個愚蠢的錯誤變化QStyleOption styleOptions() const;,謝謝 –