• QT的QML中属性无法使用


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 云从东方来 2024-06-26 11:59 采纳率: 0% 浏览 11 首页/ 编程语言 / QT的QML中属性无法使用 qt单例模式 我有一个FlightInfo.qml文件: import QtQuick Item { id:root property var flightName } 有个FlightInfos.qml文件: pragma Singleton import QtQuick QtObject { property FlightInfo f1:FlightInfo { id:f1 flightName: "BJ2333" } } 有一个Card.qml组件来容纳FlightInfo的item: import QtQuick Item { id:root property FlightInfo info } 我在main.qml中这样使用: import QtQuick import QtQuick.VirtualKeyboard Window { id: window width: 640 height: 480 visible: true title: qsTr("Hello World") Card { info:FlightInfos.f1 } } 就会报出错误qrc:/Flight/Main.qml:13:9: Unable to assign [undefined] to FlightInfo_QMLTYPE_0*,好像不能使用FlightInfos中的属性,但是这种用法我在QtDesignStudio中的example中看到过,哪位大神知道怎样是正确用法 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-26 11:59
      关注

      引自免费微信小程序:皆我百晓生

      在使用QML(Qt Quick Markup Language)时,你需要确保你的数据模型与你的视图关联起来。在这种情况下,你想要从FlightInfos组件获取f1实例,并将其传递给Card组件。

      首先,创建一个FlightInfos类来存储FlightInfo对象:

      import QtQuick
      
      class FlightInfos : public QmlObject {
      public:
          FlightInfo f1;
      
          void setF1(FlightInfo info) {
              f1 = info;
          }
      }
      

      然后,在你的main.qml中,将FlightInfos作为FlightInfo的依赖项添加到Card组件上:

      import QtQuick
      import QtQuick.Window
      import QtQuick.Viewport
      import QtQuick.QmlDesigner
      
      Window {
          id: window
          width: 640
          height: 480
          visible: true
          title: qsTr("Hello World")
      
          Card {
              // ...其他内容...
              dependencyProperty: root.f1
          }
      }
      

      这应该解决了你遇到的问题。现在,Card组件可以访问FlightInfo类中的属性了。

      展开全部

      评论 编辑记录
    • 阿里嘎多学长 2024-06-26 11:59
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      您好!看起来您在使用Qt Quick的QML语言时遇到了一些问题。我将尝试帮助您解决这个问题。

      首先,让我们逐步检查您的代码。在QML中,您需要确保正确地导入了组件,并且组件之间的引用是正确的。以下是一些可能的问题和解决方案:

      1. 导入问题:确保所有需要的组件都已经正确导入。例如,FlightInfo.qmlFlightInfos.qml需要在main.qml中被导入。

      2. 属性赋值问题:在FlightInfos.qml中,您使用了pragma Singleton,这通常用于确保一个组件在整个应用程序中只有一个实例。但是,您需要确保FlightInfo是一个有效的类型,并且可以在QtObject中作为属性使用。

      3. 类型定义问题FlightInfo需要是一个有效的QML类型。如果FlightInfo是一个自定义的QML类型,确保它已经被定义并且可以被其他QML文件引用。

      4. 属性引用问题:在main.qml中,您尝试将FlightInfos.f1赋值给Cardinfo属性。确保Cardinfo属性可以接受FlightInfo类型的值。

      5. 错误信息分析:错误信息“Unable to assign [undefined] to FlightInfo_QMLTYPE_0*”表明可能在赋值过程中FlightInfos.f1没有被正确解析或初始化。

      针对您的问题,这里有一些建议:

      • 确保FlightInfo.qmlFlightInfos.qml都在main.qml的同一个目录下,或者使用正确的路径进行导入。
      • 检查FlightInfo是否是一个有效的QML类型,并且在main.qml中正确导入。
      • 如果FlightInfo是一个自定义类型,确保它在FlightInfos.qml中被正确定义和引用。
      • 考虑在FlightInfos.qml中使用QtObjectComponent.onCompleted信号来初始化f1属性,以确保在赋值之前它已经被正确创建。

      如果上述建议仍然不能解决您的问题,您可能需要提供更多的上下文信息,或者检查Qt的官方文档和社区论坛以获取更具体的帮助。

      由于您没有提供具体的参考链接,我无法为您提供链接列表。但是,您可以查看Qt的官方文档,特别是关于QML和Qt Quick的相关部分,以获取更深入的信息和示例。希望这些信息对您有所帮助!

      评论 编辑记录
    • 百锦再@新空间代码工作室 全栈领域优质创作者 2024-06-26 11:59
      关注

      Gpt辅助回答,我来为你把关

      import QtQuick
      import QtQuick.VirtualKeyboard 
      Window { id: root width: 640 height: 480 visible: true title: "
      Hello World"

      Card { info: FlightInfos.f1 } }

      在上面的代码中,你应该将FlightInfos.f1直接赋值给Card组件的info属性,而不是留空或赋值为undefined。通过这样的方式,你就可以正确使用FlightInfos中定义的属性。希望能帮助到你。


      有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
      评论 编辑记录
      云从东方来 2024-06-26 12:09

      我就是这样做的,没有用

      回复
    • 东方佑 2024-06-26 12:13
      关注

      在QML中使用单例模式时,需要确保你的单例被正确地创建和引用。从你提供的代码来看,FlightInfos.qml 文件使用了 pragma Singleton,这通常意味着这个文件应该只创建一个实例。然而,在标准的QML中,并没有 pragma Singleton 这个关键字。可能你是在使用某种特定的框架或者库,或者是从Qt Design Studio中得到了这样的示例,它可能提供了某种特殊的支持来实现单例模式。
      在标准的QML中,单例通常是通过将对象作为组件的根元素来实现的,并确保它在整个应用程序中只被创建一次。这通常是通过将单例对象作为应用程序的资源来加载,而不是直接在QML文件中创建。
      关于你的问题,错误信息 "Unable to assign [undefined] to FlightInfo_QMLTYPE_0*" 指出 FlightInfos.f1 是未定义的,这意味着在 main.qml 中引用 FlightInfos.f1 时,FlightInfos 的单例实例并没有被正确地创建或者导入。
      这里有几个步骤你可以尝试来解决这个问题:

      1. 确保你的单例文件(FlightInfos.qml)被正确地作为资源添加到你的项目中。
      2. 如果 pragma Singleton 是特定于Qt Design Studio或者其他框架的,确保你遵循了该框架的指导原则来创建单例。
      3. 如果你在标准QML中实现单例,考虑使用以下方法:
        // FlightInfos.qml
        import QtQuick
        QtObject {
         property FlightInfo f1: FlightInfo {
             id: f1
             flightName: "BJ2333"
         }
         // 其他单例属性和方法
        }
        
        然后,在 main.qml 中,你可以这样使用它:
        // main.qml
        import QtQuick
        import QtQuick.VirtualKeyboard
        Window {
         // ...
         Component.onCompleted: {
             // 动态加载单例
             var flightInfos = Qt.createComponent("FlightInfos.qml")
             if (flightInfos.status === Component.Ready) {
                 flightInfos.createObject()
             }
         }
         Card {
             // 假设FlightInfos.qml中的单例对象叫做flightInfos
             info: flightInfos.f1
         }
         // ...
        }
        
        请注意,上述代码中的 Component.onCompleted 是在窗口加载完成后创建单例对象的。这种方法确保了单例对象在应用程序启动时被创建,并且可以在后续的QML组件中使用。
        如果这些步骤仍然不能解决问题,请确保你遵循了你所使用框架的文档,或者检查是否有任何额外的设置需要在Qt Design Studio中进行。

      展开全部

      评论
      云从东方来 2024-06-26 12:15

      不行- -

      回复
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    使用部分写时复制提升Lakehouse的 ACID Upserts性能
    jacoco—增量代码覆盖率实现
    蓝牙核心规范(V5.4)11.4-LE Audio 笔记之音频模型
    【CentOS7+ Ambari 2.7.4 + HDP 3.1.4】搭建数据仓库
    [论文笔记]涨点近5%! 以内容中心的检索增强生成可扩展的级联框架:Pistis-RAG
    Linux学习-28-用户间切换相关命令
    golang实现打包dll文件到exe
    基础数据结构之链表相关的一些问题
    栈与队列 | 有效的括号、删除字符串中的所有相邻元素、逆波兰表达式求值、滑动窗口的最大值、前K个高频元素 | leecode刷题笔记
    基于TCP的移动端IM即时通讯开发仍然需要心跳保活
  • 原文地址:https://ask.csdn.net/questions/8124211