2014-11-01 320 views

回答

0

您需要实现paintEvent为了QSS样式QWidget派生类的工作:

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

我不认为它的工作原理,如果你设定的样式表上qApp,我做了一个测试,它不“T:

main.cpp中:

#include "widget.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    qApp->setStyleSheet("QWidget{ background-color: red; } MyCustomWidget { background-color: blue; } "); 
    Widget w; 
    w.show(); 

    return a.exec(); 
} 

mycustomwidget.h:

#ifndef MYCUSTOMWIDGET_H 
#define MYCUSTOMWIDGET_H 

#include <QWidget> 
#include <QPaintEvent> 
#include <QPainter> 
class MyCustomWidget : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit MyCustomWidget(QWidget *parent = 0); 

signals: 

public slots: 

protected: 
// void paintEvent(QPaintEvent *e); 

}; 

#endif // MYCUSTOMWIDGET_H 

mycustomwidget.cpp:

#include "mycustomwidget.h" 

#include <QStyleOption> 

MyCustomWidget::MyCustomWidget(QWidget *parent) : 
    QWidget(parent) 
{ 
} 

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

widget.h:

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 

namespace Ui { 
class Widget; 
} 

class Widget : public QWidget 
{ 
    Q_OBJECT 

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

private: 
    Ui::Widget *ui; 
}; 

#endif // WIDGET_H 

widget.cpp:

#include "widget.h" 
#include "ui_widget.h" 

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 
} 

Widget::~Widget() 
{ 
    delete ui; 
} 

widget.ui:

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>Widget</class> 
<widget class="QWidget" name="Widget"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>465</width> 
    <height>392</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>Widget</string> 
    </property> 
    <layout class="QGridLayout" name="gridLayout"> 
    <item row="0" column="1"> 
    <widget class="QWidget" name="widget_2" native="true"> 
    <property name="styleSheet"> 
     <string notr="true"/> 
    </property> 
    </widget> 
    </item> 
    <item row="0" column="2"> 
    <widget class="MyCustomWidget" name="widget" native="true"> 
    <property name="styleSheet"> 
     <string notr="true"/> 
    </property> 
    </widget> 
    </item> 
    </layout> 
</widget> 
<layoutdefault spacing="6" margin="11"/> 
<customwidgets> 
    <customwidget> 
    <class>MyCustomWidget</class> 
    <extends>QWidget</extends> 
    <header>mycustomwidget.h</header> 
    <container>1</container> 
    </customwidget> 
</customwidgets> 
<resources/> 
<connections/> 
</ui> 

结果:

enter image description here

在取消对注释的代码生成以下结果:

enter image description here

所以我不明白它是如何工作的......也许这个问题是在别的地方,所以告诉我们代码。

相关问题