한국어
Qt
 

Qt Quick 응용프로그램에서는 일반적으로 QML "프론트엔드"와 함께 C++ 백엔드를 구현하여 개발한다. C++ 백엔드는 QML엔진의 rootContext() 를 통해 QML 계층에 노출되는 QObject 의 파생 클래스이다.

main.cpp

// Create instance of MyItem.
MyItem myitem;
engine.rootContext()->setContextProperty("myItem", &myitem);

main.qml

SomeItem {
    property string name: myItem.name // myItem의 속성을 바인딩.
}

애플리케이션을 종료할 때 흔히 바인딩오류를 발견할 수 있다. 애플리케이션이 완전히 종료하기 전에 백엔드가 이미 파괴되었기 때문에 QML 엔진에서 바인딩 오류가 발생한다는 것이다. 그 이유는 QML 엔진이 백엔드가 있을 것으로 기대하면서 백엔드보다 오래 지속되기 때문이다.

다음은 출력에서 가져온 에러 메세지이다.

qrc:/main.qml:13: TypeError: Cannot read property 'name' of null

이에 대한 두 가지 해결 방법이 있다. 한 가지 방법은 백엔드가 QML 엔진보다 먼저 생성되어 백엔드 객체가 마지막으로, 또는 적어도 엔진 이후에 자체적으로 소멸되도록 하는 것이다.

// QML 엔진 이전에 구축된 MyItem.
MyItem myitem;
QQmlApplicationEngine engine;

다른 방법은 힙에 백엔드를 만들고 다음과 같이 엔진을 부모로 설정하는 것이다. 이것은 엔진이 파괴될 때 백엔드도 파괴된다는 것을 의미한다.

QQmlApplicationEngine engine;

// Create instance of MyItem.
auto myitem = new MyItem(&engine);

첫 번째 방법이 더 간단하고 스택에서 직접 객체를 생성한다고 생각한다. 다만 순서를 조정하는게 간단하면서도 실수하여 버그가 생기기 쉽다. 두 번째 옵션은 실수로 순서를 변경할 수 없다는 점에서 더 강력하다(엔진이 존재하지 않는 한 백엔드를 선언할 수 없음).

애플리케이션이 이미 종료되고 있기 때문에 오류 자체는 무해하지만 그럼에도 불구하고 존재해서는 안 되는 오류이다.

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 30656
146 Qt 응용프로그램에서 PDF 문서 렌더링 file makersweb 2021.09.23 5
145 QML에서 Websocket 서버와 통신 file makersweb 2021.09.18 8
144 QML 코딩 규칙 makersweb 2021.09.05 104
143 QML 에서 QR코드 생성 file makersweb 2021.08.20 80
» 앱을 종료할 때 QML 바인딩 오류를 피하는 방법 makersweb 2021.08.08 35
141 Qt 응용프로그램에서 Lottie Animation사용 file makersweb 2021.05.30 245
140 싱글 샷(Single-Shot) 시그널/슬롯 연결 makersweb 2021.05.12 172
139 응용프로그램 자동실행 설정 (on Windows) makersweb 2021.05.08 156
138 Qt 6 에서 프로퍼티 바인딩 makersweb 2021.04.03 234
137 QML과 JavaScript 의 숫자 관련 내장된 함수 makersweb 2021.03.28 137
136 Qt 5 코드를 Qt 6로 포팅하기 위해 도움이 되는 Clazy Framework file makersweb 2021.03.01 265
135 C++로 작성한 클래스를 QML에서 생성 file makersweb 2021.02.10 903
134 Qt MQTT의 pus/sub 튜토리얼 file makersweb 2021.02.06 407
133 Qt 를 사용하거나 기반으로 하는 응용프로그램 file makersweb 2021.01.30 931
132 Loader를 사용하여 동적으로 QML 로드 makersweb 2021.01.19 455
131 QThread 및 QMutex 예제 makersweb 2021.01.12 357
130 그래픽 소프트웨어에서 디자인 내보내기 (Exporting Designs from Graphics Software) j2doll 2020.12.25 164
129 Qt5Compat 라이브러리를 사용하여 Qt5에서 Qt6로 포팅 [2] makersweb 2020.12.05 288
128 Qt Quick Controls 2에 네이티브 데스크탑 스타일 추가 file makersweb 2020.11.23 205
127 QML 바인딩 끊김 진단 makersweb 2020.11.08 304