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




奇迹般有效。

09-06 13:41