在我的 main 中,我尝试为我的 mainwidget(QWidget 的子类)设置样式表。但不幸的是,它不适用。使用 qApp 它可以工作。有什么不同?在文档中我找不到任何东西。
问问题
568 次
1 回答
0
您需要实现paintEvent
以使QSS
样式在QWidget
派生类中起作用:
void mainwidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
如果您将样式表设置为 on qApp
,我认为它不起作用,我做了一个测试,但它没有:
主.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);
//}
小部件.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
小部件.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;
}
小部件.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>
结果:
取消注释已注释的代码会生成以下结果:
所以我看不出它是如何为你工作的......也许问题出在其他地方,所以向我们展示代码。
于 2014-11-01T18:26:16.963 回答