2010-01-27 2 views
0

В моем файле .qss я хотел бы указать цвет фона моего виджета, который использует сгенерированный класс из .ui файла, как:Qt Styles: Как создать виджет, который использует класс, сгенерированный .ui?

#ifndef SPLASH_H 
#define SPLASH_H 

#include <QWidget> 

#include "ui_SplashView.h" 

class Splash : public QWidget 
{ 
Q_OBJECT 
public: 
    explicit Splash(QWidget *parent = 0); 

signals: 

public slots: 

private: 
    Ui::SplashView ui; 
}; 

#endif // SPLASH_H 

-

#include "splash.h" 

Splash::Splash(QWidget *parent) : QWidget(parent) 
{ 
    ui.setupUi(this); 
} 

ui_SplashView.h сам файл выглядит следующим образом:

QT_BEGIN_NAMESPACE 

class Ui_SplashView 
{ 
public: 
    QPushButton *pushButton; 

    void setupUi(QWidget *SplashView) 
    { 
    if (SplashView->objectName().isEmpty()) 
     SplashView->setObjectName(QString::fromUtf8("SplashView")); 
    SplashView->resize(360, 640); 
    pushButton = new QPushButton(SplashView); 
    pushButton->setObjectName(QString::fromUtf8("pushButton")); 
    pushButton->setGeometry(QRect(70, 30, 75, 23)); 

    retranslateUi(SplashView); 

    QMetaObject::connectSlotsByName(SplashView); 
} // setupUi 

void retranslateUi(QWidget *SplashView) 
{ 
    SplashView->setWindowTitle(QApplication::translate("SplashView", "Splash", 0, QApplication::UnicodeUTF8)); 
    pushButton->setText(QApplication::translate("SplashView", "PushButton", 0, QApplication::UnicodeUTF8)); 
} // retranslateUi 

}; 

namespace Ui { 
    class SplashView: public Ui_SplashView {}; 
} // namespace Ui 

В моей .qss я попытался следующие, но ни один из них не работает:

*#m_splashView { 

background-color: blue; }

*#SplashView { 
    background:yellow; 
    background-color:blue; 
} 

*#Splash { 
    background:yellow; 
    background-color:blue; 
} 

*#splash { 
    background:yellow; 
    background-color:blue; 
} 

*#ui { 
    background:yellow; 
    background-color:blue; 
} 

Ui--SplashView { 
    background:purple; 
    background-color:blue; 
} 

Ui--Splash { 
    background:purple; 
    background-color:blue; 
} 

SplashView { 
    background:purple; 
    background-color:blue; 
} 

Splash { 
    background:purple; 
    background-color:blue; 
} 

Этот код работает, но это слишком общий характер, я хочу специально предназначаться этот выплеск виджет:

QWidget { 
    background:purple; 
} 

Любые идеи?

ответ

1

Найден ответ. Пользовательский виджет должен реализовать эту функцию:

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

В .qss я поставил:

*#SplashView { 
     background:red; 
} 

Поскольку это имя объекта в .ui файле.

Смежные вопросы