You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QML QtQuick应用启动时图标加载失败程序终止求助

问题解决:QML图标属性错误与Action图标不显示

一、解决"Cannot assign to non-existent property 'icon'"错误

这个错误的核心是你在第40行使用的组件没有icon这个属性,不同组件的图标属性写法不同:

  1. 如果是Window组件
    Qt6中Window的窗口图标属性为windowIcon,而非icon,修改代码为:

    windowIcon: "qrc:/images/DataIO.png"
    
  2. 如果是Button/MenuItem等QtQuick.Controls组件
    这类组件的图标需要通过icon.source赋值,不能直接写icon: "路径",正确写法:

    icon.source: "qrc:/images/DataIO.png"
    
  3. 如果是自定义组件
    需确认组件是否定义了icon属性,未定义则添加:

    property url icon
    

二、解决Action组件图标不显示问题

1. 修正资源路径

根据你的构建配置,图片有两个有效资源路径:

  • 来自手动编写的resource.qrc:qrc:/images/DataIO.png
  • 来自qml模块自动生成的qrc:qrc:/qt/qml/DataIO/images/DataIO.png

将Action的图标路径改为上述任意一个即可:

Action {
    text: qsTr("&Connect...")
    icon.source: "qrc:/images/DataIO.png"
    onTriggered: QmlLink.connect()
}

2. 消除资源重复冲突

你的CMakeLists同时在qt_add_executable和qt_add_qml_module中添加了图片资源,可能导致路径混乱。建议保留qml模块的资源管理,删除手动resource.qrc的配置:

set(CMAKE_AUTORCC ON)

qt_add_executable(dataio
    main.cpp DataIO.hpp DataIO.cpp
    # 移除resource.qrc
)

qt_add_qml_module(dataio
    URI DataIO
    VERSION 0.1
    QML_FILES
        Main.qml
    RESOURCES
        images/DataIO.png
)

修改后,可直接使用相对QML文件的路径:

icon.source: "images/DataIO.png"

3. 验证资源加载(可选)

在main.cpp中添加代码,确认资源是否正确注册:

#include <QResource>
#include <QDebug>

int main(int argc, char *argv[]) {
    QGuiApplication app(argc, argv);

    qDebug() << "qrc:/images/DataIO.png exists:" << QResource(":/images/DataIO.png").isValid();
    qDebug() << "qrc:/qt/qml/DataIO/images/DataIO.png exists:" << QResource(":/qt/qml/DataIO/images/DataIO.png").isValid();

    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/qt/qml/DataIO/Main.qml"_qs);
    // ... 后续代码
}

内容的提问来源于stack exchange,提问作者Pietro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:44:53