Qt / Qml und Methodenüberlastungen

9

Ich bin gerade auf ein merkwürdiges Verhalten von Qt-Framework gestoßen, als ich in Qml überladene C ++ - Methoden aufgerufen und versucht habe, den Grund dafür zu verstehen. Nehmen wir an, ich habe eine QList<QVariant> -like-Klasse mit den folgenden Methoden:

%Vor%

Qml:

%Vor%

Qt entscheidet sich irgendwie dafür, die void insert(int index, const QVariantList &items) Überladung mit items Argument auf a null QVariant eine leere QVariantList anstelle der void insert(int index, const QVariant &item) Überladung mit QString in% verpackt anzuzeigen co_de%.

Wenn ich nun die Reihenfolge der Deklarationen wie folgt ändere, funktioniert es wie erwartet:

%Vor%

Ich konnte in der Qt-Framework-Dokumentation nichts über die Reihenfolge der Deklarationen finden und wie sie die Art und Weise beeinflusst, wie Methoden während des Aufrufs aufgelöst werden.

Kann jemand bitte erklären? Danke.

    
gplusplus 15.02.2015, 18:48
quelle

1 Antwort

3

Diese Frage bezieht sich auf das Überladen in JavaScript. Sobald Sie damit bekannt werden - Sie verstehen Grund von "seltsames Verhalten" Ihres Codes. Werfen Sie einen Blick auf Funktionsüberladung in Javascript - Best Practices .

>

In wenigen Worten - ich empfehle Ihnen, als nächstes zu tun: da Sie QVariant Variablen auf beiden Seiten (QML und Qt / C ++) betreiben können - übergeben Variante als Parameter, und verarbeiten Sie es auf Qt / C ++ Seite wie Sie Wunsch.

Sie können etwas wie folgt verwenden:

Ihre C ++ - Klasse wurde erstellt und an QML übergeben (z. B. als setContextProperty("TestObject", &tc) ):

%Vor%

Irgendwo in Ihrer QML :

%Vor%     
troyane 15.02.2015 20:21
quelle

Tags und Links