如何从Qt 5.5中的main.qml访问MainForm.ui.qml的子属性?

时间:2015-11-05 23:41:04

标签: qt qml

我正在使用c ++中的信号和插槽来读取所选目录的内容并输出到MainForm.ui.qml中的T​​extArea。我知道我有一切正常,因为信号正在发送正确的字符串到main.qml中的函数“setTextArea1”,我可以输出到console.log-但是我似乎无法找到正确的语法将该字符串发送到id :MainForm.ui.qml中的T​​extArea1。 我一直在

'textArea1 is not defined'

我确信它很简单,但我似乎无法找到任何示例...(我使用单个qml文件重建程序并且它有效但我真的想知道如何使它与MainForm一起使用。 ui.qml)

main.qml

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2

ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")

signal qmlSelectClicked(string text)

function setTextArea1(text) {
    console.log(text);
    textArea1.text = text
}


menuBar: MenuBar {
    Menu {
        title: qsTr("File")
        MenuItem {
            text: qsTr("&Open")
            onTriggered: console.log("Open action triggered");
        }
        MenuItem {
            text: qsTr("Exit")
            onTriggered: Qt.quit();
        }
    }
}

MainForm {
    anchors.fill: parent
    selectButton.onClicked: qmlSelectClicked("Select Clicked")
}
}

MainForm.ui.qml

Item {
width: 640
height: 480

property alias printButton: printButton
property alias selectButton: selectButton
property alias textArea1: textArea1

TextArea {
    id: textArea1
    x: 41
    y: 20
    width: 558
    height: 359
    text: "Select a Directory to scan..."
}

RowLayout {
    x: 367
    y: 379
    anchors.verticalCenterOffset: 196
    anchors.horizontalCenterOffset: 163
    anchors.centerIn: parent


    Button {
        id: selectButton
        text: qsTr("Select")
    }
    Button {
        id: printButton
        text: qsTr("Print To File")
    }
}
}

谢谢!

1 个答案:

答案 0 :(得分:1)

您所处的当前范围并不知道textArea1的任何内容,如错误消息所示。您需要向id提供MainForm

MainForm {
    id: mainForm
    anchors.fill: parent
    selectButton.onClicked: qmlSelectClicked("Select Clicked")
}

然后使用它限定对textArea1的访问权限:

mainForm.textArea1.text = text