【问题标题】:How can I use a SP_* icon in a custom stylesheet?如何在自定义样式表中使用 SP_* 图标?
【发布时间】:2015-05-15 15:10:43
【问题描述】:

Qt 的 QStyle 提供了standardIcon,这使得在给定 StandardPixmap 值的情况下获取标准图标成为可能:

const QStyle * style = QApplication::style();
const QIcon ok       = style->standardIcon(QStyle::SP_DialogOkButton);

如果您想使用.setIcon 手动设置图标,例如在 QPushButtons 或其他小部件上,这非常有用。但是,我想在(外部)样式表中设置图标。如果图标在:/images/ok.icon 中可用,那就很简单了:

#include <QApplication>
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton button("Example");
    button.setStyleSheet(
        "icon-size: 32px 32px;"
        "qproperty-icon: url(:/images/ok.icon);" // <--
    );    

    return a.exec();
}

但是,我想使用style-&gt;standardIcon(QStyle::SP_DialogOkButton);,而不是资源系统中的图标。这可能吗,还是我需要手动准备所有图标?

TL;DR

// What I have:
button.setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton));

// What I want:
button.setStyleSheet(
  "qproperty-icon: url(some_url);"
);

【问题讨论】:

    标签: qt qtstylesheets


    【解决方案1】:

    这将是标准 Qt 图标之一:

    qproperty-icon: url(:/trolltech/styles/commonstyle/images/standardbutton-apply-16.png)
    

    你可以在qt-everywhere-opensource-src-4.8.0/src/gui/styles/images找到所有可用的图标

    如果我将其设置为 -16.png 变体,图标是否会正确调整大小?

    文档说图标不会按比例放大。你可以使用-128.png,它会根据iconSize()缩小。

    此外,standardIcon 使用操作系统/窗口管理器 默认图标,而 trolltech 图标不同。有什么办法吗?

    您可以通过QIcon::fromTheme() 访问操作系统主题图标,但这仅适用于 Linux。在 OSX 和 Windows 中,Qt 从资源中回退到标准图标。

    如果你想拥有多个图标大小,能够使用系统图标并且仍然从资源中回退到图标,我建议你继承 QPushButton 并添加一个新的自定义属性来处理所有事情。

    Q_PROPERTY(QString my_icons_set READ iconsSet WRITE setIconsSet)
    ...
    void setIconsSet(QString icons)
    {
        // parse the string
    }
    

    然后在 css 中你可以做类似的事情:

    qproperty-my_icons_set: "fromTheme::dialog-ok, standardIcon::SP_DialogOkButton";
    

    【讨论】:

    • setIcon 使用适当的图标大小。如果我将其设置为 -16.png 变体,图标是否会正确调整大小? (我目前没有安装 Qt 版本)。此外,standardIcon 使用操作系统/窗口管理器默认图标,而 trolltech 图标不同。有什么办法可以做到这一点?不管怎样,谢谢你的回答。
    猜你喜欢
    • 2013-08-11
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多