Embedding C++ Objects into QML with Context Properties
Qt 2017. 6. 11. 17:42[원문] https://doc.qt.io/qt-5/qtqml-cppintegration-contextproperties.html
Embedding C++ Objects into QML with Context Properties
QML 객체를 C ++ 응용 프로그램에로드 할 때 QML 코드 내에서 사용할 수있는 일부 C ++ 데이터를 직접 포함시키는 것이 유용 할 수 있습니다. 예를 들어, 포함 된 객체에서 C ++ 메소드를 호출하거나 C ++ 객체 인스턴스를 QML 뷰의 데이터 모델로 사용할 수 있습니다.
C ++ 데이터를 QML 객체에 삽입하는 기능은 QQmlContext 클래스를 통해 가능합니다. 이 클래스는 데이터를 QML 객체의 컨텍스트에 노출하여 QML 코드의 범위 내에서 직접 데이터를 참조 할 수 있도록합니다.
Setting a Simple Context Property
// MyItem.qml import QtQuick 2.0 Text { text: currentDateTime }
이 currentDateTime 값은 QQmlContext :: setContextProperty ()를 사용하여 QML 구성 요소를로드하는 C ++ 응용 프로그램에서 직접 설정할 수 있습니다.
QQuickView view; view.rootContext()->setContextProperty("currentDateTime", QDateTime::currentDateTime()); view.setSource(QUrl::fromLocalFile("MyItem.qml")); view.show();
참고 : QML에서 평가 된 모든 표현식은 특정 컨텍스트에서 평가되므로 컨텍스트가 수정되면 해당 컨텍스트의 모든 바인딩이 다시 평가됩니다. 따라서 컨텍스트 속성은 응용 프로그램 초기화 외부에서주의하여 사용해야합니다. 그러면 응용 프로그램 성능이 저하 될 수 있습니다.
Setting an Object as a Context Property
컨텍스트 속성은 QVariant 또는 QObject * 값을 포함 할 수 있습니다. 즉,이 방법을 사용하여 사용자 지정 C ++ 개체를 삽입 할 수 있으며 이러한 개체를 수정하고 QML에서 직접 읽을 수 있습니다. 여기에서는 QDateTime 값 대신 QObject 인스턴스를 포함하도록 위의 예를 수정하고 QML 코드는 객체 인스턴스에 대한 메서드를 호출합니다.
C++ | class ApplicationData : public QObject { Q_OBJECT public: Q_INVOKABLE QDateTime getCurrentDateTime() const { return QDateTime::currentDateTime(); } }; int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQuickView view; ApplicationData data; view.rootContext()->setContextProperty("applicationData", &data); view.setSource(QUrl::fromLocalFile("MyItem.qml")); view.show(); return app.exec(); } |
QML | // MyItem.qml import QtQuick 2.0 Text { text: applicationData.getCurrentDateTime() } |
(C ++에서 QML로 반환 된 날짜 / 시간 값은 Qt.formatDateTime () 및 관련 함수를 통해 형식화 할 수 있습니다.)
QML 항목이 컨텍스트 속성에서 신호를 수신해야하는 경우 연결 유형을 사용하여 신호에 연결할 수 있습니다. 예를 들어 ApplicationData에 dataChanged ()라는 신호가 있으면이 신호는 Connections 객체 내의 onDataChanged 핸들러를 사용하여 연결할 수 있습니다.
Text { text: applicationData.getCurrentDateTime() Connections { target: applicationData onDataChanged: console.log("The application data changed!") } }
컨텍스트 속성은 QML 뷰에서 C ++ 기반 데이터 모델을 사용할 때 유용 할 수 있습니다. 다음 예제를 참조하십시오.
> String ListModel
> Object ListModel
> AbstractItemModel
QStringList, QList <QObject *> 기반 모델 및 QAbstractItemModel을 QML 뷰에서 사용하는 방법을 보여줍니다.
자세한 정보는 QQmlContext 문서를 참조하십시오.
'Qt' 카테고리의 다른 글
Data Type Conversion Between QML and C++ (0) | 2017.06.11 |
---|---|
Interacting with QML Objects from C++ (0) | 2017.06.11 |
Defining QML Types from C++ (0) | 2017.06.10 |
Exposing Attributes of C++ Types to QML (0) | 2017.06.10 |
Intergrating QML and C++ (0) | 2017.06.10 |