한국어
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 86174
19 Qt의 스레드간 시그널 슬롯의 커넥션타입 [1] makersweb 2015.10.24 10217
18 Ubuntu Linux에서 Qt Creator 설치 file makersweb 2016.03.06 10680
17 Qt 응용프로그램 배포(windows) file makersweb 2018.10.10 11382
16 Qt Installer Framework - 패키징, 설치프로그램 제작 file makersweb 2018.10.14 11696
15 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 11975
14 Qml 기본 컴포넌트 강좌 (1) file makersweb 2019.01.03 12121
13 Qt의 오픈소스 라이센스 소개 file makersweb 2019.12.15 12621
12 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 [20] file makersweb 2018.02.23 13044
11 QML과 QtQuick 모듈 개념과 기본 타입들 makersweb 2019.04.26 13439
10 Qml과 C++로 구현하는 GUI어플리케이션 file makersweb 2018.12.25 14002
9 Qt 프로그래밍의 시작 makersweb 2015.10.25 14404
8 초보자를 위한 첫번째 프로젝트 - QML로 만드는 Hello World file makersweb 2018.03.16 14516
7 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 14977
6 QThread 소개 및 예제 makersweb 2019.12.25 19585
5 Qt의 시그널 슬롯 시스템 file makersweb 2015.10.20 23673
4 Windows에서 Qt 설치 따라하기 file makersweb 2019.10.14 30929
3 QString 문자열 다루기 예제 운영자 2019.01.26 40344
2 콘솔에서 사용자 입력받기 file makersweb 2020.03.22 51857
1 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 221841