이 페이지에서

애플리케이션에 스크립트 기능 추가하기

Qt는 JavaScript를 이용한 애플리케이션 스크립팅 기능을 지원합니다. 다음 가이드와 참조 자료에서는 JavaScript와 Qt를 활용한 프로그래밍의 다양한 측면을 다룹니다.

스크립팅 클래스

다음 클래스들은 Qt 애플리케이션에 스크립팅 기능을 추가합니다.

QJSEngine

JavaScript 코드 실행 환경

QJSPrimitiveValue

JavaScript 의미 체계에서 기본 데이터형을 처리합니다

QJSValue

Qt/JavaScript 데이터 유형을 담는 컨테이너 역할을 합니다

QJSValueIterator

QJSValue용 Java 스타일 반복자

기본 사용법

스크립트 코드를 평가하려면 ` QJSEngine ` 객체를 생성하고, 평가할 스크립트 코드(텍스트)를 인수로 전달하여 해당 객체의 `evaluate()` 함수를 호출합니다.

QJSEngine engine;
qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();

반환 값은 평가 결과( QJSValue 객체로 표현됨)이며, 이를 표준 C++ 및 Qt 유형으로 변환할 수 있습니다.

사용자 정의 속성은 스크립트 엔진에 등록함으로써 스크립트에서 사용할 수 있게 할 수 있습니다. 이를 수행하는 가장 쉬운 방법은 스크립트 엔진의 전역 객체(Global Object)에 속성을 설정하는 것입니다:

engine.globalObject().setProperty("foo", 123);
qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();

이렇게 하면 속성이 스크립트 환경에 등록되어, 스크립트 코드에서 해당 속성을 사용할 수 있게 됩니다.

스크립트 엔진에서 QObject 사용 가능하게 만들기

QObject 기반의 모든 인스턴스는 스크립트에서 사용할 수 있도록 설정할 수 있습니다.

QObject 가 QJSEngine::newQObject() 함수에 전달되면, QObject 의 시그널, 슬롯, 속성 및 자식 객체를 스크립트에서 사용할 수 있도록 하는 Qt Script 래퍼 객체가 생성됩니다.

다음은 QObject 의 서브클래스 인스턴스를 "myObject" 라는 이름으로 스크립트 코드에서 사용할 수 있도록 하는 예시입니다:

QJSEngine engine;
QObject *someObject = new MyObject;
QJSValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue);

이렇게 하면 스크립트 환경에 myObject 이라는 전역 변수가 생성됩니다. 이 변수는 기본이 되는 C++ 객체에 대한 프록시 역할을 합니다. 스크립트 변수의 이름은 무엇이든 상관없으며, 즉 QObject::objectName()에 의존하지 않는다는 점에 유의하십시오.

애플리케이션 보안에 미치는 영향

JavaScript를 사용한 애플리케이션 스크립팅의 보안 모델은 C++ 코드의 보안 모델과 동일합니다. 즉, 사용자는 Qt 애플리케이션을 설치하는 것과 동일한 방식으로 신뢰할 수 있는 스크립트를 설치하여 실행합니다.

사용자의 신뢰를 유지하기 위해, 애플리케이션 개발자는 임의의 자바스크립트 코드를 평가해서는 안 됩니다. 자바스크립트 엔진의 샌드박스는 단지 의미론적 장벽일 뿐입니다. 스크립트는 애플리케이션의 나머지 부분과 동일한 프로세스에서 동일한 권한으로 평가되며, 동일한 메모리를 공유합니다. 결과적으로, 스크립트에 노출된 C++ 객체는 추가적인 보안 조치 없이도 접근될 수 있습니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.