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);
,而不是资源系统中的图标。这是可能的,还是我需要手工准备所有图标?
// What I have:
button.setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton));
// What I want:
button.setStyleSheet(
"qproperty-icon: url(some_url);"
);
答案 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";