我正在使用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()
}
}MainScreen组件在MainScreen.qml文件中编写如下:
ControlView {
id: mainScreenView
objectName: "MainScreenView"
function doVideo() {
console.log("Called")
}
}但是,这不像预期的那样工作,我得到了错误:
TypeError: Property 'doVideo' of object QQmlComponent is not a function我认为问题在于,MainScreen的完整定义并没有在ApplicationWindow级别上看到。我试着看看我能不能投进去,但没有成功。
另外,mainScreen.objectName返回空字符串,而不是MainScreenView。
发布于 2016-04-08 13:13:52
我认为使用MainScreen组件的正确方法是这样做:
main.qml
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()
}
}MainScreen.qml (与您相同的代码,但我使用了Item而不是ControlView来检查编译)
import QtQuick 2.5
Item {
id: mainScreenView
objectName: "MainScreenView"
function doVideo() {
console.log("Called")
}
}另一个选项是创建组件动态。
发布于 2016-09-13 10:23:22
而不是
属性组件主屏幕: MainScreen {}
使用
属性var主屏幕: MainScreen {}
这是示例代码
main.qml
import QtQuick 2.6
import QtQuick.Controls 1.5
ApplicationWindow {
id: rootWindow
objectName: "window"
visible: true
property var mainScreen: MainScreen { }
Component.onCompleted: {
mainScreen.doVideo()
}
}
MainScreen.qml
import QtQuick 2.6
Item {
id: mainScreenView
objectName: "MainScreenView"
function doVideo() {
console.log("Called")
}
}
发布于 2016-04-08 13:31:26
我想你只是想要这样的东西:
ApplicationWindow {
// if you really need a property of your Item uncomment the following line:
// property alias mainScreen : mainScreen
MainScreen {
id: mainScreen
}
function videoDone() {
mainScreen.doSomething()
}
}在MainScreen.qml中:
import QtQuick 2.0
Item {
function doSomething()
{
console.debug("Test")
}
}https://stackoverflow.com/questions/36499094
复制相似问题