我正在使用 QML 开发前端,但在从我的主 QML 窗口访问组件时遇到问题。所以,我的主 QML 窗口是这样的:
ApplicationWindow {
id: rootWindow
objectName: "window"
property Component mainScreen: MainScreen {} // my component
// This is a slot that gets called from C++ side.
// The function gets called fine.
function videoDone() {
mainScreen.doVideo()
}
}
Run Code Online (Sandbox Code Playgroud)
该MainScreen
组件在MainScreen.qml
文件中写入为:
ControlView {
id: mainScreenView
objectName: "MainScreenView"
function doVideo() {
console.log("Called")
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这并没有按预期工作,我收到错误消息:
TypeError: Property 'doVideo' of object QQmlComponent is not a function
Run Code Online (Sandbox Code Playgroud)
我认为问题在于MainScreen
ApplicationWindow 级别没有看到的完整定义。我试图看看我是否可以施放它,但没有成功。
还mainScreen.objectName
返回一个空字符串而不是MainScreenView
我认为使用MainScreen
组件的正确方法是做这样的事情:
主文件
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
id: rootWindow
objectName: "window"
visible: true
MainScreen { id: mainScreen } // my component
Component.onCompleted: {
mainScreen.doVideo()
}
}
Run Code Online (Sandbox Code Playgroud)
MainScreen.qml(与你相同的代码,但我使用Item
而不ControlView
只是检查编译)
import QtQuick 2.5
Item {
id: mainScreenView
objectName: "MainScreenView"
function doVideo() {
console.log("Called")
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是动态创建组件。
归档时间: |
|
查看次数: |
1001 次 |
最近记录: |