【问题标题】:Is it possible to use Qt Style Sheets with promoted widgets in Qt Creator?是否可以在 Qt Creator 中将 Qt 样式表与提升的小部件一起使用?
【发布时间】:2011-09-25 20:39:32
【问题描述】:

我正在尝试使用 Qt 样式表对标准小部件进行大量重新设计。因此,在#objectName 选择器为不同的小部件手动完成大部分操作后,我决定以某种方式对类似的小部件进行分组。

例如,我有多个QFrames,它们的作用类似于内部表单中的标题。我希望他们都拥有相同的样式表。一种方法是使用命名约定(这是我的备用变体),即QFrame[objectName|="prefix_"]。但我想按类对我的小部件进行分组。所以我创建了简单的占位符类:

class HeaderFrame: public QFrame
{
public:
    HeaderFrame(QWidget *parent = NULL): QFrame(parent) {}
};

这让我可以将所有这些QFrames 提升为HeaderFrames。之后我尝试设置

HeaderFrame { background-color: red; }

样式表到 MainWindow 对象本身(使其作用于所有 HeaderFrames),但它不起作用。 QtCreator 表单设计器中没有任何变化,编译应用程序后也没有任何变化。我尝试了这个样式表的不同变体,但没有任何效果。

那么,是否只有 Qt 小部件(如 QLabel、QFrame 等)可用于这种样式?或者有什么方法可以为你推广的小部件编写样式表?

【问题讨论】:

    标签: qt stylesheet qt-creator qtstylesheets


    【解决方案1】:

    是的,这是可能的。您应该记住的唯一一件事 - 派生小部件的基础应该支持样式表,并仔细重新实现它们的 PaintEvent。

    更新: 例子 类:

    class Header1Label : public QLabel
    {
        Q_OBJECT
        public:
        Header1Label(QWidget *parent = 0):QLabel(parent){};
        ~Header1Label(){};
    };
    

    样式表:

    Header1Label
    {
        font-size:14px;
        font-weight:900;    
    }
    

    【讨论】:

    • 那我该怎么做呢?我根本没有重新实现 paintEvent(),因此将使用 QFrame::paintEvent() 与样式表完美配合。我想要的只是按问题所示的提升的小部件类名称对样式表进行分组。
    • 喜欢内置小部件。按他们的班级名称。
    • @Raiv 是的,您忘记 Q_OBJECT 宏是对的。遗憾的是,它无论如何都不会在 QtCreator 表单设计器中显示应用的样式表。所以我应该使用带有名称前缀选择器的后备变体。
    • 在运行程序中可以看到,qt creator 本身不会显示。
    • 是的。这样一来,细粒度的应用程序设计就会变得更加困难。
    【解决方案2】:

    您可以随时将class-name 添加到对象的类属性QStringList 中,并使用.class-name 选择器。

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2020-10-03
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多