如何在自定义样式表中使用 SP_* 图标?
How can I use a SP_* icon in a custom stylesheet?
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);"
);
那将是标准 Qt 图标之一:
qproperty-icon: url(:/trolltech/styles/commonstyle/images/standardbutton-apply-16.png)
您可以在 qt-everywhere-opensource-src-4.8.0/src/gui/styles/images
中找到所有可用的图标
Will the icon get resized correctly if I set it to the -16.png
variant?
文档说图标不会放大。你可以使用-128.png
,它会根据iconSize()
.
缩小
Also, the standardIcon uses the operating system/window manager
default icons, whereas the trolltech icons differ. Any way to do this?
您可以通过 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";
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);"
);
那将是标准 Qt 图标之一:
qproperty-icon: url(:/trolltech/styles/commonstyle/images/standardbutton-apply-16.png)
您可以在 qt-everywhere-opensource-src-4.8.0/src/gui/styles/images
Will the icon get resized correctly if I set it to the
-16.png
variant?
文档说图标不会放大。你可以使用-128.png
,它会根据iconSize()
.
Also, the standardIcon uses the operating system/window manager default icons, whereas the trolltech icons differ. Any way to do this?
您可以通过 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";