2014-01-09 66 views
1

我想將QWidget-container的clicked()信號連接到我的插槽。所以我寫了這個代碼:QWidget的clicked()信號中斷樣式表

HPP:

class LinkWidget : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit LinkWidget(QWidget * parent = 0); 
    ~LinkWidget(); 

signals: 
    void clicked(); 

protected: 
    void mousePressEvent(QMouseEvent * event) ; 
}; 

CPP:

LinkWidget::LinkWidget(QWidget * parent) : 
    QWidget(parent) 
{ 

} 

LinkWidget::~LinkWidget() 
{ 

} 

void LinkWidget::mousePressEvent(QMouseEvent * event) 
{ 
    emit clicked(); 
} 

一切工作正常,但我不能再指定樣式表來這個小工具:

這一工程:

QWidget * statuspanel = new QWidget(this); 
statuspanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); 
statuspanel->setMinimumHeight(20); 
statuspanel->setMaximumHeight(20); 
statuspanel->setStyleSheet("border-bottom: 1px solid rgb(206, 203, 186);" 
          "border-right : 1px solid rgb(206, 203, 186);"); 

那沒有:

LinkWidget * statuspanel = new LinkWidget(this); 
statuspanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); 
statuspanel->setMinimumHeight(20); 
statuspanel->setMaximumHeight(20); 
statuspanel->setStyleSheet("border-bottom: 1px solid rgb(206, 203, 186);" 
          "border-right : 1px solid rgb(206, 203, 186);"); 

我在做什麼錯?

謝謝!

+0

我猜你是不是繼承了QWidget正確,有些代碼可能會在LinkWidget類 –

+0

不知道是否會丟失它可能有幫助,但你可以嘗試:statuspanel-> setStyleSheet(「LinkWidget {border-bottom:1px solid rgb(206,203,186); border-right:1px solid rgb(206,203,186);}」) ; –

回答

5

爲了樣式表直接QWidget子類工作,你應該重新實現paintEvent方法:

void LinkWidget::paintEvent(QPaintEvent *) 
{ 
    QStyleOption opt; 
    opt.init(this); 
    QPainter p(this); 
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); 
} 
+0

謝謝!真的行! –