如何在支持Windows和Linux的情况下扩展QStyle类提供的标准图标?
namespace Ui {
class TVLoader;
}
class TVLoader : public QMainWindow
{
Q_OBJECT
public:
explicit TVLoader(QWidget *parent = 0) :
QMainWindow(parent),
ui(new Ui::TVLoader)
{
ui->setupUi(this);
ui->actionAdd_TV_Show->setIcon(style()->standardIcon(?)); // this is where I would need some kind of "Add" icon which unfortunately doesn't exist
}
答案 0 :(得分:1)
如果您想提供自己的图标,重新实现子类中的standardIconImplementation()插槽并从那里返回一个新图标,那么您想要继承QStyle的子类。以下是一个例子:
class MyProxyStyle : public QProxyStyle
{
Q_OBJECT
public:
MyProxyStyle(QStyle *style = 0) : QProxyStyle(style) { }
public slots:
QIcon standardIconImplementation(StandardPixmap standardIcon,
const QStyleOption *option = 0,
const QWidget *widget = 0) const
{
// check the standardIcon parameter for the icon type
if (standardIcon==QStyle::SP_DesktopIcon)
{
// return your new icon here
standardIcon = QStyle::SP_DirIcon;
}
return QProxyStyle::standardIconImplementation(standardIcon, option, widget);
}
};
这是你如何使用它:
// set new style for your widget
setStyle(new MyProxyStyle(style()));
// return different icon for QStyle::SP_DesktopIcon
action0->setIcon(style()->standardIcon(QStyle::SP_DesktopIcon));
希望这有帮助,尊重
答案 1 :(得分:0)
从4.6开始,Qt可以使用freedesktop图标主题:
QIcon undo_icon = QIcon::fromTheme("edit-undo");
但Windows(和MacOS)中没有图标主题。但是,您可以使用任何您想要的主题,您只需将此主题放入:/ icons 资源目录(或其中的一部分)并在main()中执行以下操作:
if (!QIcon::hasThemeIcon("document-open")) {
QIcon::setThemeName("/");
}
(这是QTBUG-16697的黑客攻击。)