2017-08-13 1 views
0

Ich möchte mehrere Singletons in einer qmldir Datei verwenden, aber es scheint nicht zu funktionieren, ich habe keinen Fehler, aber das Programm startet nicht.Wie legt man mehrere Singletons in eine qmldir-Datei?

qmldir:

singleton File1 1.0 File.qml 
singleton File2 1.0 File2.qml 

main:

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"); 
} 

funktioniert der Code, wenn ich die zweite Zeile in qmldir löschen, aber dann File2 wird

+1

_Multiple Singletons_ ist ein bisschen widersprüchlich, nein? – user0042

+0

Ja, aber als ich nach einer Möglichkeit suchte, qml-Dateien zu verknüpfen, um Signale voneinander zu senden und zu empfangen, wie im obigen Beispiel gezeigt, schien Singleton die einzige Lösung zu sein, ohne zu wissen, was Singleton bedeutete Ich dachte, dass es großartig wäre, wenn ich es auf mehrere Dateien anwenden könnte, um sie zu verlinken, wenn ich das nicht kann, also sag mir bitte, was kann ich tun? –

+2

Mehrere verschiedene Singletons sind nicht widersprüchlich. – AlexanderVX

Antwort

1

Wenn Ihr qmldir Datei undifined ist genau so, wie Sie geschrieben haben:

Singleton File1 1.0 File.qml 
Singleton File2 1.0 File2.qml 

Der Fehler innerhalb dieser befindet sich möglicherweise, da die Schlüsselwort ist singleton, nicht Singleton.

Versuchen Sie das mal:

singleton File1 1.0 File.qml 
singleton File2 1.0 File2.qml 

Aber dieser Fehler sollte nicht unbemerkt fehlschlagen. Es sollte eine gewisse Fehler sein:

[main.qml] a component declaration requires two or three arguments, but 4 were provided
[qmldir] a component declaration requires two or three arguments, but 4 were provided

//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 

Arbeiten wie ein Charme.

+0

Ich schrieb es richtig, Singleton –

Verwandte Themen