按名称的geting图标不起作用

时间:2018-06-18 22:42:46

标签: qt qml qtquick2

我无法按名称查找图标以正常工作。我复制了Gallery示例中的代码,并在我的项目中重复了相同的配置,但它不起作用。

这就是我所做的:

1.将图标/图库复制到我自己项目的目录中,这是文件列表:

this.handleSubmit = this.handleSubmit.bind(this)

2.将icons/default icons/default/20x20@3 icons/default/20x20@3/back.png icons/default/20x20@3/menu.png icons/default/20x20@3/drawer.png icons/default/20x20@4 icons/default/20x20@4/back.png icons/default/20x20@4/menu.png icons/default/20x20@4/drawer.png icons/default/20x20 icons/default/20x20/back.png icons/default/20x20/menu.png icons/default/20x20/drawer.png icons/default/index.theme icons/default/20x20@2 icons/default/20x20@2/back.png icons/default/20x20@2/menu.png icons/default/20x20@2/drawer.png 个文件添加到主题目录中:

index.theme

3.为main.cpp添加了相应的行,启用图标,这是代码:

[Icon Theme]
Name=default
Comment=Qt Quick Controls 2 Gallery Example Icon Theme

Directories=20x20,20x20@2,20x20@3,20x20@4

[20x20]
Size=20
Type=Fixed

[20x20@2]
Size=20
Scale=2
Type=Fixed

[20x20@3]
Size=20
Scale=3
Type=Fixed

[20x20@4]
Size=20
Scale=4
Type=Fixed

在QML文件中,我以这种方式使用图标:

QGuiApplication::setApplicationName("MyApp");
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

QGuiApplication app(argc, argv);
QIcon::setThemeName("default");
QQuickStyle::setStyle("Material");

QQmlApplicationEngine engine;    
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
    return -1;
return app.exec();

如果我通过URL查找,它可以正常工作:

ToolButton {
    icon.name: "menu"
}

那么,为什么查找名称不起作用以及如何调试呢?

编辑:

在Mitch的回答之后,我发现图标不起作用,因为":/ icons"在图标的路径中输入不是第一个。

所以,这段代码已经工作了:

ToolButton {
    icon.source: "qrc:/icons/default/20x20/menu.png"
}

然而,这个cdoe工作:

QIcon::setThemeName("default");
QStringList list;
list<<":/icons";
list<<"/usr/share/icons";
QIcon::setThemeSearchPaths(list);

要使其正常工作,您只需要创建图标所在的路径,首先是列表中的条目。

但也许这是一个错误,我正在使用Qt 5.11

1 个答案:

答案 0 :(得分:1)

如果您所做的事情列表详尽无遗,那么您missed a step

  

传统上,只有Linux和UNIX支持平台级别的图标主题,但可以在应用程序中捆绑一个兼容的图标主题,以在任何平台上使用主题图标。

     

默认图标主题搜索路径取决于平台。在Linux和UNIX上,搜索路径将使用XDG_DATA_DIRS环境变量(如果可用)。所有平台都有资源目录:/ icons作为后备。可以使用QIcon :: setThemeSearchPaths()。

设置自定义图标主题搜索路径      

以下示例使用Qt的资源系统将名为mytheme的图标主题捆绑到应用程序的资源中。

<RCC>
    <qresource prefix="/">
        <file>icons/mytheme/index.theme</file>
        <file>icons/mytheme/32x32/myicon.png</file>
        <file>icons/mytheme/32x32@2/myicon.png</file>
    </qresource>
</RCC>

创建该文件后,您还需要将其添加到.pro