在 QML 中的 TabView 内的另一个 QML 文件中调用函数或 属性
Call function or property in another QML File inside a TabView in QML
我想从 main.qml
调用 PageA.qml
中的 myFunc()
(参见 Button
的 onClicked
事件)。我尝试了一些 属性 别名的东西,但到目前为止没有任何效果。有什么想法吗?
这是我的 PageA.qml
代码:
import QtQuick 2.4
import QtQuick.Controls 1.2
Item {
function myFunc() { /* ... */ }
TextField { id: myText }
}
这是我的 main.qml
:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
ApplicationWindow {
width: 640
height: 480
visible: true
TabView {
Tab {
title: "Tab A"
PageA { }
}
// ...
}
Button {
text: "click"
onClicked: callMyFunc()
}
function callMyFunc() {
// Call myFunc() in PageA.qml or read property "text" of the TextField
}
}
你在 PageA
中调用函数的问题源于 Tab
不是从 Item
继承的,而是从 Loader
继承的,因此直接调用函数就像tabID.function()
不可能。您需要 Tab
的 item
属性:
TabView {
Tab {
id: tabA // Give the tab an id
title: "Tab A"
PageA { }
}
// ...
}
Button {
text: "click"
onClicked: callMyFunc()
}
function callMyFunc() {
tabA.item.myFunc() // Call the function myFunc() in PageA
}
或者您可以创建一个别名:
TabView {
id: mytabview
property alias tabItem : tabA.item
Tab {
id: tabA // Give the tab an id
title: "Tab A"
PageA { }
}
// ...
}
Button {
text: "click"
onClicked: callMyFunc()
}
function callMyFunc() {
mytabview.tabItem.myFunc() // Call the function myFunc() in PageA
}
但别名或不别名或多或少是一种装饰性的选择。
我想从 main.qml
调用 PageA.qml
中的 myFunc()
(参见 Button
的 onClicked
事件)。我尝试了一些 属性 别名的东西,但到目前为止没有任何效果。有什么想法吗?
这是我的 PageA.qml
代码:
import QtQuick 2.4
import QtQuick.Controls 1.2
Item {
function myFunc() { /* ... */ }
TextField { id: myText }
}
这是我的 main.qml
:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
ApplicationWindow {
width: 640
height: 480
visible: true
TabView {
Tab {
title: "Tab A"
PageA { }
}
// ...
}
Button {
text: "click"
onClicked: callMyFunc()
}
function callMyFunc() {
// Call myFunc() in PageA.qml or read property "text" of the TextField
}
}
你在 PageA
中调用函数的问题源于 Tab
不是从 Item
继承的,而是从 Loader
继承的,因此直接调用函数就像tabID.function()
不可能。您需要 Tab
的 item
属性:
TabView {
Tab {
id: tabA // Give the tab an id
title: "Tab A"
PageA { }
}
// ...
}
Button {
text: "click"
onClicked: callMyFunc()
}
function callMyFunc() {
tabA.item.myFunc() // Call the function myFunc() in PageA
}
或者您可以创建一个别名:
TabView {
id: mytabview
property alias tabItem : tabA.item
Tab {
id: tabA // Give the tab an id
title: "Tab A"
PageA { }
}
// ...
}
Button {
text: "click"
onClicked: callMyFunc()
}
function callMyFunc() {
mytabview.tabItem.myFunc() // Call the function myFunc() in PageA
}
但别名或不别名或多或少是一种装饰性的选择。