如何在QML应用中得到一个Item的所有属性,信号及方法,qmlitem

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在QML应用中得到一个Item的所有属性,信号及方法,qmlitem相关的知识,希望对你有一定的参考价值。

参考技术A 这个问题的问题所在就是可以拿到item的id。
那么就要看你的item是放在哪里。
如果放在ApplicationWindow 或者Window 下 那么只要定义一个属性指向 item 就可以在全局拿到Item的所有属性.
例如:
ApplicationWindow
property alias myitem: _item
Item
id: _item




如果是在Stackview的某个页面 那么你的要 指向那个页面 _stackView.get(); get参数可以通过 _stackView.find()获取。在页面上定义属性 指向item。那么获取的方法就是
_stackView.get().myitem
诸如此类 还有其他View。
你可以研究 帮助文档中 返回类型是Item的方法。是解决此类问题的关键本回答被提问者采纳

如何在 QML 中捕获信号?

【中文标题】如何在 QML 中捕获信号?【英文标题】:How to capture a signal in QML? 【发布时间】:2012-02-29 01:34:04 【问题描述】:

如何将 s 信号从一个 qml 组件发送到另一个?

下面是一个例子:

Rectangle 
    id: main
    width: 360; height: 360
    signal clicked()

    Text 
        id: testStr
        anchors.centerIn: parent
        text: "Hello World"
    
    MouseArea 
        id: mouseArea
        anchors.fill: parent
        onClicked:  Qt.quit(); 
    

    Component.onCompleted: clicked()
    onClicked:  testStr.text = "Demo"

如何在其他组件中捕获信号?

【问题讨论】:

【参考方案1】:

你应该使用组件信号的connect()方法(信号本身就是对象)。

function clickHandler() 
    console.log('main clicked')

Component.onCompleted: 
    main.clicked.connect(clickHandler)

见http://developer.qt.nokia.com/doc/qt-4.8/qmlevents.html

【讨论】:

谢谢。能不能说明signal(onXXXXX)只在自身使用,如果想在其他中捕获,使用Connecet? 是的,如果您在 qml 文件中声明组件的实例,您可以将代码分配给该组件的预定义 onXxx 插槽。它已经连接,您只需将表达式绑定到它。如果要将信号与另一个实例或函数的槽连接,则必须使用connect 方法。【参考方案2】:

在另一个对象中,您只需添加一个on 字样,后跟信号名称。例如:

Rectangle 
  YourQmlObject 
    onClicked:  ... 
  

(clicked 是一个令人困惑的信号名称,因为它很常见。但如果你调用了你的信号orange,你就会绑定onOrange:

【讨论】:

感谢您的帮助。如果有很多 'YourQmlObject' ,那么我会在每个 Component 中写 onClicked: ... 吗?还有其他方法吗? 信号将向上传播,因此您可以将“地块”放入单个容器 AllMyQmlObjects,这是您的对象的长列表,并将 onClicked: 处理程序放入最终包含的任何文件中AllMyQmlObjects.【参考方案3】:

你可以使用 QML 连接元素

 Connections 
 target: yourQmlObject 
 onClicked: foo(...)
 

【讨论】:

【参考方案4】:

QML

Button
  id: btn_add_pq
  text: "Add"
  onClicked: 
    var component = Qt.createComponent("add_pq.qml")
    var dialog    = component.createObject(root)
    dialog.open()

    dialog.accepted.connect(function()
      console.log("ID     :" + window.in_id)
      console.log("Name   :" + window.in_name)
      console.log("Comment:" + window.in_comment)
    )
  

add_pq.qml

Dialog 
  id:dialog
  ...
  property alias in_id: txtID.text
  property alias in_comment: txtComment.text
  property alias in_name: txtName.text
  ...
  contentItem: GridLayout
    ...
    TextField
      id: txtComment
      Layout.alignment: Qt.AlignRight
    
    Button
      Layout.columnSpan: 2
      text: "Add"
      Layout.alignment: Qt.AlignRight
      onClicked: 
        dialog.click(StandardButton.Save)
      
    
  

【讨论】:

以上是关于如何在QML应用中得到一个Item的所有属性,信号及方法,qmlitem的主要内容,如果未能解决你的问题,请参考以下文章

如何导出 qmlitem 的所有属性/信号?

Qt Qml连接到Context属性的QObject属性的信号

QML::常用基础控件属性1

如何将C ++类设置为qml中的Item?

QML 鼠标事件

如何将信号从一个 qml 发送到另一个