为什么从静态库导入资源文件.qrc时QML调试不起作用

Why QML debugging is not working when resource file .qrc is imported from a static library

提问人:LDC 提问时间:11/13/2023 最后编辑:LDC 更新时间:11/16/2023 访问量:41

问:

我在静态库项目中填充了一组 .qrc 文件。 在应用程序项目中,我按如下方式初始化资源:

QGuiApplication app(argc, argv);
Q_INIT_RESOURCE(base);
Q_INIT_RESOURCE(images);

...

应用程序将运行并正确加载所有 .qrc 文件。当我在资源中定义的任何.qml文件中放置断点时,应用程序会停止,但Qt Creator无法将我指向中断所在的行。如果我单击恢复 (F5),应用程序将正确恢复。 当命中断点时,调试表达式计算器仅显示一个旋转的轮子,直到恢复执行:enter image description here

当命中断点时(我确定是),IDE 不会在红色圆圈内显示黄色箭头:enter image description here

我按照文档中的指示,启用了QML调试,还设置了:

CONFIG += declarative_debug
CONFIG += qml_debug

在我的 .pro 中。不幸的是,没有运气。

版本

  • QtCreator:基于 Qt 6.3.1 的 8.0.0(GCC 10.3.1 20210422 (Red Hat 10.3.1-1),x86_64)
  • Qt:5.15.2 GCC 64位

你能帮我了解发生了什么吗? 谢谢

调试 qml qt-creator

评论

0赞 mzimmers 11/13/2023
什么版本的Qt?如果你在QML文件的JS部分内设置断点,它确实应该在调试器中停止。我们能看到你放置断点的那一行吗?
0赞 LDC 11/13/2023
@mzimmers:将信息添加到问题中。

答:

0赞 LDC 11/16/2023 #1

这里问的问题是:调试存储在共享库中qrc中的QML

我最终得到了以下方案:

  • 资源文件未导入到共享库中
  • 在应用程序项目中导入的资源文件

由于我有多个应用程序使用共享资源,因此我必须以这种方式组织项目结构:

  • 资源
  • res1 文件夹
  • res1.qrc //res1文件夹作为目录添加的位置
  • res2 文件夹
  • res2,
  • ...
  • project1.pro //使用 res*.qrc
  • project2.pro //使用 res*.qrc
  • ...

这是我找到的唯一满足以下约束的方案:

  • 添加到 .qrc 的内容必须位于 .qrc 文件的同一文件夹或子文件夹中
  • 添加到资源的目录应该在QtCreator项目窗格中以简单名称显示(例如,不是res.qrc/very/long/absolute/path/res.qrc)
  • 资源文件中的内容也应该用一个简单的名称显示(例如 不是),并且新资源不应要求别名(通过脚本或手动插入)以确保无摩擦开发res.qrc/res/myitem.qmlres.qrc/../../very/long/path/to/myitem.qml

此致敬意