如何创建自己的使用qss的qt小部件
我正在尝试将qss用于我自己的小部件。并在加载新样式表时更改样式。我不明白如何从当前样式表中获取颜色。以及何时更新它 要获取颜色,我尝试使用palette.colorQPalette::ColorRole::。并在changeEvent发生时进行更新: 类Widget:publicqwidget{ Q_对象 公众: WidgetQWidget*parent=nullptr :QWidgetparent、primarythis、backgroundthis{ 更新画笔; } 受保护的: 无效paintEventQPaintEvent*事件{ background.drawRectevent->rect; primary.drawTextevent->rect,hi; } void changeEventQEvent*事件{ 如果事件->类型==QEvent::StyleChange{ 更新画笔; } QWidget::changeEventevent; } 私人: 无效更新刷{ primary.setBrushpalette.colorQPalette::ColorRole::WindowText; background.setbrushplete.colorqpalete::ColorRole::background; } 主要油漆工; 油漆工背景; };如何创建自己的使用qss的qt小部件,qt,qt5,qwidget,qtstylesheets,Qt,Qt5,Qwidget,Qtstylesheets,我正在尝试将qss用于我自己的小部件。并在加载新样式表时更改样式。我不明白如何从当前样式表中获取颜色。以及何时更新它 要获取颜色,我尝试使用palette.colorQPalette::ColorRole::。并在changeEvent发生时进行更新: 类Widget:publicqwidget{ Q_对象 公众: WidgetQWidget*parent=nullptr :QWidgetparent、primarythis、backgroundthis{ 更新画笔; } 受保护的: 无效pai
但是我有一个简单的小部件如果你的问题像使用样式表更改背景颜色或文本颜色一样基本,那么下面的内容应该可以帮助你 Widget.h 可以使用以下文件测试上述内容: main.cpp
你为什么要使用paintEvent重载而不仅仅是样式表?@TheBadger,因为我想用自己的自定义paintEvent创建小部件,并通过样式表进行自定义。问题是:如何访问样式表的样式颜色以及何时需要更新缓存的颜色
#pragma once
#include <QWidget>
#include <QStyleOption>
#include <QPainter>
class Widget
: public QWidget
{
Q_OBJECT
public:
Widget( QWidget* parent = nullptr )
: QWidget( parent ) {}
~Widget() override = default;
void paintEvent( QPaintEvent* ) override
{
QStyleOption opt;
opt.init( this );
QPainter p( this );
style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this );
}
};
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include "Widget.h"
int main( int argc, char* argv[] )
{
QApplication a( argc, argv );
a.setStyleSheet( "Widget { background-color: blue; }" );
QWidget one;
new QVBoxLayout( &one );
Widget w;
w.setMinimumSize(200, 200);
one.show();
one.layout()->setMargin(20);
one.layout()->addWidget( &w );
QPushButton button("Change");
one.layout()->addWidget( &button );
QObject::connect(&button, &QPushButton::clicked, &a, [&a](){
a.setStyleSheet( "Widget { background-color: green; }" );
});
return a.exec();
}