我想在一个qmldir文件中使用多个单例,但是它似乎不起作用,没有错误,但是程序无法启动。
qmldir:
singleton File1 1.0 File.qml
singleton File2 1.0 File2.qml
主要:
import QtQuick 2.7
import QtQuick.Controls 2.1
import '.'
Window{
visible:true
width:640
height:480
title: qstr("hello world!")
Button{
onCliked: File2.test();
}
}
File2.qml:
pragma Singleton
import QtQuick 2.7
import QtQuick.Controls 2.1
Item{
signal test;
onTest:console.log("File2 received signal");
}
File1.qml:
pragma Singleton
import QtQuick 2.7
import QtQuick.Controls 2.1
Item{
signal test;
onTest:console.log("File1 received signal");
}
如果我删除qmldir中的第二行,代码会工作,但是File2将是未定义的
最佳答案
如果您的qmldir
文件与您编写的完全相同:
Singleton File1 1.0 File.qml
Singleton File2 1.0 File2.qml
由于关键字是
singleton
,而不是Singleton
,因此错误可能存在于其中。试试看:
singleton File1 1.0 File.qml
singleton File2 1.0 File2.qml
但是该错误不应默默地失败。应该有一些错误:
[main.qml]组件声明需要两个或三个参数,但提供了4个
[qmldir]组件声明需要两个或三个参数,但提供了4个
//main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import '.'
ApplicationWindow {
id: window
width: 800
height: 600
visible: true
Row {
spacing: 3
Button {
text: 'single1'
onClicked: Single.sig()
}
Button {
text: 'signle2'
onClicked: Single2.sig()
}
}
}
//singleton.qml
pragma Singleton
import QtQuick 2.0
QtObject {
signal sig
onSig: console.log('Singleton1 Received')
}
//singleton2.qml
pragma Singleton
import QtQuick 2.0
QtObject {
signal sig
onSig: console.log('Singelton2 Received')
}
// qmldir
singleton Single 1.0 singleton.qml
singleton Single2 1.0 singleton2.qml
奇迹般有效。