애플리케이션 스크립트 가능 만들기

Qt는 JavaScript를 사용한 애플리케이션 스크립팅을 지원합니다. 다음 가이드와 레퍼런스는 JavaScript와 Qt를 사용한 프로그래밍의 측면을 다룹니다.

스크립팅 클래스

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

QJSEngine

JavaScript 코드 평가를 위한 환경

QJSPrimitiveValue

JavaScript 시맨틱의 기본 유형에 대해 작동합니다.

QJSValue

Qt/JavaScript 데이터 타입을 위한 컨테이너 역할을 합니다.

QJSValueIterator

QJSValue를 위한 자바 스타일 이터레이터

기본 사용법

스크립트 코드를 평가하려면 QJSEngine 를 만들고 평가할 스크립트 코드(텍스트)를 인수로 전달하여 평가() 함수를 호출합니다.

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

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

스크립트 엔진에 등록하여 스크립트에서 사용자 지정 속성을 사용할 수 있습니다. 이는 스크립트 엔진의 전역 객체의 속성을 설정하면 가장 쉽게 수행할 수 있습니다:

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

이렇게 하면 프로퍼티가 스크립트 환경에 배치되어 스크립트 코드에서 사용할 수 있게 됩니다.

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

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

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

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

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

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

애플리케이션 보안에 대한 시사점

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

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

© 2025 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.