如何在自定义样式表中使用SP_ *图标?

时间:2015-03-13 07:43:49

标签: qt qtstylesheets

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->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);"
);

1 个答案:

答案 0 :(得分:4)

这将是标准的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";