我想在一个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将会是unifined
答案 0 :(得分:1)
如果您的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
像魅力一样。