Mam następujący problem.Jak odsłonić struktury C++ dla obliczeń do Qml
Opracowuję model w C++ i widok w Qml, łącząc je za pomocą kontrolerów. W moim modelu wykonuję wiele obliczeń. Oferuję również użytkownikom mojej aplikacji możliwość pisania własnych programów obsługi zdarzeń napisanych w qml. Teraz natknąłem się na punkt, w którym zdecydowałem się użyć notacji o stałym punkcie i napisałem odpowiednią klasę C++. Teraz chcę zaoferować klasie FixedPoint - w tym wszystkim jej operatorom - programistom, którzy zdecydują się rozszerzyć moją aplikację w Qml. Do tej pory oferowałem wszystkie dane jako QProperties, co jest wymagane przez wytyczne dotyczące kodowania. Ale jestem otwarty na inne rozwiązania, aby omówić je w moim zespole. Oczywiście, stały punkt nie jest tożsamością, a algorytmy polegają na możliwości jego kopiowania, co nie jest dozwolone przy dziedziczeniu z QObject.
Pojawia się pytanie: Jak mogę odsłonić klasę/klasę C++ dla QML, która NIE jest tożsamością?
Przykładem w kodzie:
struct FixedPoint
{
FixedPoint(FixedPoint&);
FixedPoint& operator=(FixedPoint&);
...
int mantissa;
int exponent;
}
Chcę używać go w QML jako nieruchomości (wartość) z QQuickItem napisany w C++:
MyQmlObject{
value{ mantissa: 134; exponent: 3 }
}
Obiekt wartość jest następnie używany w obliczeniach w javascript i jest kopiowany kilka razy dłużej. Nie mogę więc uczynić wartości właściwością typu FixedPoint *. Czy mam rację?
Czy próbowałeś użyć 'Q_DECLARE_METATYPE' +' qmlRegisterMetatype'? Pamiętaj, że w tym przypadku możesz przekazywać wartości tylko za pośrednictwem sygnałów/gniazd. Ponieważ, aby bezpośrednio przekazać coś do/z QML, musi to być 'QObject'. Operatory nie będą działały w QML, ponieważ nie możesz rozszerzyć języka QML :) –
Możesz owinąć swoją instancję jako QVariant, jeśli tylko chcesz ją przekazać (np. Nie musisz jej używać w wyrażeniach javascript). – sergk
Z drugiej strony, jeśli potrzebujesz go faktycznie użyć w qml, powinieneś wyprowadzić z QObject lub użyć QMap. –
sergk