Стили Qt: Как стилизовать виджет, который использует сгенерированный класс .ui? - PullRequest
0 голосов
/ 27 января 2010

В моем файле .qss я хотел бы указать цвет фона моего виджета, который использует сгенерированный класс из файла .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 {

цвет фона: синий; }

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

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

QWidget {
    background:purple;
}

Есть идеи?

1 Ответ

1 голос
/ 28 января 2010

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

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.

...