QML QtQuick应用启动时图标加载失败程序终止求助
问题解决:QML图标属性错误与Action图标不显示
一、解决"Cannot assign to non-existent property 'icon'"错误
这个错误的核心是你在第40行使用的组件没有icon这个属性,不同组件的图标属性写法不同:
如果是Window组件
Qt6中Window的窗口图标属性为windowIcon,而非icon,修改代码为:windowIcon: "qrc:/images/DataIO.png"如果是Button/MenuItem等QtQuick.Controls组件
这类组件的图标需要通过icon.source赋值,不能直接写icon: "路径",正确写法:icon.source: "qrc:/images/DataIO.png"如果是自定义组件
需确认组件是否定义了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
相关产品推荐
相关产品推荐

