如何将多个单例放在一个qmldir文件中?

时间:2017-08-13 19:21:42

标签: javascript c++ qt singleton qml

我想在一个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

1 个答案:

答案 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

像魅力一样。