Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建自己的使用qss的qt小部件_Qt_Qt5_Qwidget_Qtstylesheets - Fatal编程技术网

如何创建自己的使用qss的qt小部件

如何创建自己的使用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

我正在尝试将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; } 主要油漆工; 油漆工背景; };
但是我有一个简单的小部件

如果你的问题像使用样式表更改背景颜色或文本颜色一样基本,那么下面的内容应该可以帮助你

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();
}