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
Qt 为样式表启用自己的小部件_Qt_Qwidget_Qtstylesheets_Qt5.6_Qframe - Fatal编程技术网

Qt 为样式表启用自己的小部件

Qt 为样式表启用自己的小部件,qt,qwidget,qtstylesheets,qt5.6,qframe,Qt,Qwidget,Qtstylesheets,Qt5.6,Qframe,我想为样式表启用我自己的widget类,我所说的不是setStyleSheet(qss),而是qss样式表中的选择器。据了解,我必须在名称空间中替换 这里()我发现了一个类似的问题,但它已经超过4年了。根据答案,我有一些详细的问题: a) 已发布的方法是否具有覆盖的paintEvent仍然有效(Qt5.6/5.7),从 b) 在同一个线程()中,我不需要重写paintEvent。好的,让我想到: b1)即使使用QFrame,覆盖paintEvent是否有害? b2)其他基类(例如QTableVi

我想为样式表启用我自己的widget类,我所说的不是
setStyleSheet(qss)
,而是qss样式表中的选择器。据了解,我必须在名称空间中替换

这里()我发现了一个类似的问题,但它已经超过4年了。根据答案,我有一些详细的问题:

a) 已发布的方法是否具有覆盖的
paintEvent
仍然有效(Qt5.6/5.7),从

b) 在同一个线程()中,我不需要重写
paintEvent
。好的,让我想到: b1)即使使用
QFrame
,覆盖
paintEvent
是否有害? b2)其他基类(例如
QTableView
)有什么关系?是什么使得
QFrame
具有这种特殊的角色

c) 有没有人找到关于这个主题的官方Qt文档。a中的代码很好,但它来自哪里?老实说,我不明白它是干什么的

--编辑--

丹尼尔指出了那神奇的
paintEvent
片段(
QWidget
段落)的来源。有趣的是,
QDialog
也使用了相同的(“仅支持…”),这可能意味着我也必须使用其中的代码片段。我不明白为什么他们不按照默认值将该片段添加到
QWidget
paintEvent

覆盖paintEvent的发布方法仍然有效(Qt5.6/5.7)

在同一个线程()中,我不需要重写paintEvent。好的,让我想到:b1)不管怎样,覆盖paintEvent是否有害,即使使用QFrame?b2)其他基类(例如QTableView)有什么关系?是什么使QFrame具有这种特殊的角色

  • 如果你是子类
    QFrame
    不是特例,它适用于所有小部件。默认设置不执行任何操作。它是空的。这就是为什么在子类化
    QWidget
    时,必须重写它并提供自己的绘画来启用样式表。重写
    QFrame
    的绘制事件是无害的,但除非调用
    QFrame
    的实现,否则将丢失默认行为
有没有人找到关于这个主题的官方Qt文档。a中的代码很好,但它来自哪里

  • 。 如果向下滚动一点,它会显示:
    QWidget
    只支持背景, 背景剪辑和背景原点属性。如果你是子类 在QWidget中,您需要为您的自定义设置提供一个paintEvent QWidget如下所示:
-

已发布的具有覆盖的paintEvent的方法是否仍然有效(Qt5.6/5.7)

在同一个线程()中,我不需要重写paintEvent。好的,让我想到:b1)不管怎样,覆盖paintEvent是否有害,即使使用QFrame?b2)其他基类(例如QTableView)有什么关系?是什么使QFrame具有这种特殊的角色

  • 如果你是子类
    QFrame
    不是特例,它适用于所有小部件。默认设置不执行任何操作。它是空的。这就是为什么在子类化
    QWidget
    时,必须重写它并提供自己的绘画来启用样式表。重写
    QFrame
    的绘制事件是无害的,但除非调用
    QFrame
    的实现,否则将丢失默认行为
有没有人找到关于这个主题的官方Qt文档。a中的代码很好,但它来自哪里

  • 。 如果向下滚动一点,它会显示:
    QWidget
    只支持背景, 背景剪辑和背景原点属性。如果你是子类 在QWidget中,您需要为您的自定义设置提供一个paintEvent QWidget如下所示:
-


a) :“仅支持背景、背景剪辑和背景源属性。如果您从QWidget子类化,则需要为自定义QWidget提供paintEvent,如下所示:“我认为它在Qt5.6/5.7中仍然有效。谢谢,您已经找到了该代码片段的原始源代码。更新如上。a):“仅支持背景、背景剪辑和背景源属性。如果您从QWidget中创建子类,则需要为自定义QWidget提供paintEvent,如下所示:“我认为它在Qt5.6/5.7中仍然有效。谢谢,您已经找到了该代码片段的原始源代码。以上更新。知道为什么不将
paintEvent
实现作为
QWidget
的默认值吗?@HorstWalter,因为
QWidget
是一个空的小部件。知道为什么不将
paintEvent
实现作为
QWidget
的默认值吗?@HorstWalter,因为
QWidget
是一个空的小部件吗小装置。
void CustomWidget::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }
void CustomWidget::paintEvent(QPaintEvent *)    
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}