当前位置 : 首页 » 互动问答 » 正文

QT / QML业务逻辑与UI分离

分类 : 互动问答 | 发布时间 : 2018-04-27 17:10:43 | 评论 : 1 | 浏览 : 31 | 喜欢 : 0

我试图将Main.qml中的业务逻辑和UI中的 MainForm.ui.qml 放入,但我无法通过小部件id连接这两个

MainForm.ui.qml:<notranslate >导入QtQuick 2.8 导入QtQuick.Controls 2.2 导入QtQuick.Layouts 1.3 页面{    id:页面    标题:TabBar {...}    StackLayout {       ID:堆栈       面板{          流 {             文本域 {                id:theText             }             属性别名sendBtn:sendBtn             按钮{                id:sendBtn             }          }       }    } }

导入QtQuick 2.8
导入QtQuick.Window 2.2

窗口{
   可见:真实
   宽度:640
   身高:480
   标题:qsTr(“Hello World”)
   MainForm {
      anchors.fill:parent
      sendBtn {
         onClicked:backend.sendTextToServer(theText.text)
      }
   }
}

Main.qml:

 Qt Creator说:

无效的属性名称“sendBtn”(M16)运行失败,出现以下消息:

QQmlApplicationEngine无法加载组件 qrc:/Main.qml:12不能分配给不存在的属性“sendBtn”

QQmlApplicationEngine failed to load component
qrc:/Main.qml:12 Cannot assign to non-existent property "sendBtn"

回答(1)

  • 1楼
  • 当你把Pane中的属性别名sendBtn:sendBtn 解释为一个Pane属性,所以你不能以这种方式访问​​它时,将它放在Page的上下文中是正确的。

     import QtQuick 2.8
    导入QtQuick.Controls 2.2
    导入QtQuick.Layouts 1.3
    
    页面{
       id:页面
       属性别名sendBtn:sendBtn
       属性别名theText:theText
       标题:TabBar {...}
       StackLayout {
          ID:堆栈
          面板{
             流 {
                文本域 {
                   id:theText
                }
    
                按钮{
                   id:sendBtn
                }
             }
          }
       }
    }

相关阅读: