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

4

Qt的QStyle提供了standardIcon函数,根据StandardPixmap值可以获取标准图标:

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

如果你想手动设置图标,例如在QPushButtons或其他小部件上,那么使用“.setIcon”很方便。然而,我希望在(外部)样式表中设置图标。如果该图标位于“:/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);,而不是资源系统中的图标。这是可能的吗,还是我需要手动准备所有图标?

简洁版

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

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

6

这将是标准的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()访问OS主题图标,但这仅适用于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 图标不同。有什么办法可以解决这个问题吗?无论如何,感谢您的回答。 - Zeta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接