我想将QWidget-container的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);");
我究竟做错了什么?
谢谢!
为了使样式表适用于直接QWidget
子类,您应该重新实现该paintEvent
方法:
void LinkWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }