QJSEngine Class
QJSEngine 클래스는 자바스크립트 코드를 평가하기 위한 환경을 제공합니다. 더 보기...
Header: | #include <QJSEngine> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
상속합니다: | QObject |
상속 대상: |
참고: 이 클래스의 모든 함수는 재인용됩니다.
공용 유형
enum | Extension { TranslationExtension, ConsoleExtension, GarbageCollectionExtension, AllExtensions } |
flags | Extensions |
enum | ObjectOwnership { CppOwnership, JavaScriptOwnership } |
속성
- uiLanguage : QString
공공 기능
QJSEngine() | |
QJSEngine(QObject *parent) | |
virtual | ~QJSEngine() override |
(since Qt 6.1) QJSValue | catchError() |
To | coerceValue(const From &from) |
void | collectGarbage() |
QJSValue | evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, QStringList *exceptionStackTrace = nullptr) |
T | fromManagedValue(const QJSManagedValue &value) |
T | fromPrimitiveValue(const QJSPrimitiveValue &value) |
T | fromScriptValue(const QJSValue &value) |
T | fromVariant(const QVariant &value) |
QJSValue | globalObject() const |
(since Qt 6.1) bool | hasError() const |
QJSValue | importModule(const QString &fileName) |
void | installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue()) |
bool | isInterrupted() const |
QJSValue | newArray(uint length = 0) |
QJSValue | newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString()) |
QJSValue | newObject() |
QJSValue | newQMetaObject() |
QJSValue | newQMetaObject(const QMetaObject *metaObject) |
QJSValue | newQObject(QObject *object) |
(since 6.2) QJSValue | newSymbol(const QString &name) |
bool | registerModule(const QString &moduleName, const QJSValue &value) |
void | setInterrupted(bool interrupted) |
void | setUiLanguage(const QString &language) |
(since Qt 5.12) void | throwError(const QString &message) |
(since 6.1) void | throwError(const QJSValue &error) |
(since Qt 5.12) void | throwError(QJSValue::ErrorType errorType, const QString &message = QString()) |
QJSManagedValue | toManagedValue(const T &value) |
QJSPrimitiveValue | toPrimitiveValue(const T &value) |
QJSValue | toScriptValue(const T &value) |
QString | uiLanguage() const |
신호
void | uiLanguageChanged() |
정적 공개 멤버
QJSEngine::ObjectOwnership | objectOwnership(QObject *object) |
void | setObjectOwnership(QObject *object, QJSEngine::ObjectOwnership ownership) |
관련 비회원
QJSEngine * | qjsEngine(const QObject *object) |
상세 설명
스크립트 평가하기
evaluate()를 사용하여 스크립트 코드를 평가합니다.
evaluate()는 평가 결과를 담고 있는 QJSValue 을 반환합니다. QJSValue 클래스는 결과를 다양한 C++ 유형으로 변환하는 함수를 제공합니다(예: QJSValue::toString() 및 QJSValue::toNumber()).
다음 코드 스니펫은 스크립트 함수를 정의한 다음 QJSValue::call()를 사용하여 C++에서 호출하는 방법을 보여줍니다:
QJSValue fun = myEngine.evaluate("(function(a, b) { return a + b; })"); QJSValueList args; args << 1 << 2; QJSValue threeAgain = fun.call(args);
위의 코드 조각에서 볼 수 있듯이 스크립트는 문자열 형태로 엔진에 제공됩니다. 스크립트를 로드하는 일반적인 방법 중 하나는 파일의 내용을 읽고 evaluate()에 전달하는 것입니다:
QString fileName = "helloworld.qs"; QFile scriptFile(fileName); if (!scriptFile.open(QIODevice::ReadOnly)) // handle error QTextStream stream(&scriptFile); QString contents = stream.readAll(); scriptFile.close(); myEngine.evaluate(contents, fileName);
여기서는 파일 이름을 evaluate()에 두 번째 인수로 전달합니다. 두 번째 인수는 디버깅 목적으로 Error
객체에 저장되는 범용 문자열로, 평가에는 아무런 영향을 미치지 않습니다.
더 큰 기능의 경우 코드와 데이터를 모듈로 캡슐화할 수 있습니다. 모듈은 스크립트 코드, 변수 등이 포함된 파일로, 내보내기 문을 사용하여 나머지 애플리케이션에 대한 인터페이스를 설명합니다. 가져오기 문을 사용하여 모듈은 다른 모듈의 기능을 참조할 수 있습니다. 이를 통해 소규모로 연결된 빌딩 블록으로 스크립트 애플리케이션을 안전하게 구축할 수 있습니다. 반면 evaluate()를 사용하는 방식은 evaluate() 호출의 내부 변수나 함수가 실수로 전역 객체를 오염시키고 후속 평가에 영향을 미칠 위험이 있습니다.
다음 예제는 숫자를 추가할 수 있는 모듈을 제공합니다:
export function sum(left, right) { return left + right }
이 모듈은 math.mjs
라는 이름으로 저장된 경우 QJSEngine::import()를 사용하여 로드할 수 있습니다:
QJSvalue module = myEngine.importModule("./math.mjs"); QJSValue sumFunction = module.property("sum"); QJSValue result = sumFunction.call(args);
모듈은 import 문을 사용하여 다른 모듈의 기능을 사용할 수도 있습니다:
import { sum } from "./math.mjs"; export function addTwice(left, right) { return sum(left, right) * 2; }
모듈은 파일일 필요는 없습니다. QJSEngine::registerModule ()에 등록된 값일 수 있습니다:
import version from "version"; export function getVersion() { return version; }
QJSValue version(610); myEngine.registerModule("version", version); QJSValue module = myEngine.importModule("./myprint.mjs"); QJSValue getVersion = module.property("getVersion"); QJSValue result = getVersion.call();
명명된 내보내기가 지원되지만 객체의 멤버로 취급되므로 기본 내보내기는 ECMAScript 객체여야 합니다. QJSValue 에 있는 대부분의 newXYZ 함수는 객체를 반환합니다.
QJSValue name("Qt6"); QJSValue obj = myEngine.newObject(); obj.setProperty("name", name); myEngine.registerModule("info", obj);
import { name } from "info"; export function getName() { return name; }
엔진 구성
globalObject() 함수는 스크립트 엔진과 연결된 전역 객체를 반환합니다. 글로벌 객체의 속성은 모든 스크립트 코드에서 액세스할 수 있습니다(즉, 전역 변수). 일반적으로 "사용자" 스크립트를 평가하기 전에 글로벌 개체에 하나 이상의 속성을 추가하여 스크립트 엔진을 구성하는 것이 좋습니다:
myEngine.globalObject().setProperty("myNumber", 123); ... QJSValue myNumberPlusOne = myEngine.evaluate("myNumber + 1");
스크립팅 환경에 사용자 지정 속성을 추가하는 것은 애플리케이션에 특정한 스크립팅 API를 제공하는 표준 방법 중 하나입니다. 일반적으로 이러한 사용자 지정 속성은 newQObject() 또는 newObject() 함수에 의해 생성된 개체입니다.
스크립트 예외
evaluate()는 구문 오류 등으로 인해 스크립트 예외를 발생시킬 수 있습니다. 이 경우 evaluate()는 던져진 값(일반적으로 Error
객체)을 반환합니다. QJSValue::isError ()를 사용하여 예외를 확인합니다.
오류에 대한 자세한 정보를 보려면 QJSValue::toString()를 사용하여 오류 메시지를 얻고 QJSValue::property()를 사용하여 Error
객체의 속성을 쿼리합니다. 다음 속성을 사용할 수 있습니다:
name
message
fileName
lineNumber
stack
QJSValue result = myEngine.evaluate(...);if (result.isError()) qDebug() << "줄에서 잡히지 않은 예외가발생했습니다 ."<< result.property("lineNumber").toInt() << ": "<< result.toString();
스크립트 객체 생성
newObject()를 사용하여 자바스크립트 객체를 생성합니다. 이는 스크립트 문 new Object()
에 해당하는 C++입니다. QJSValue 의 객체별 기능을 사용하여 스크립트 객체를 조작할 수 있습니다(예: QJSValue::setProperty()). 마찬가지로 newArray()를 사용하여 JavaScript 배열 객체를 만듭니다.
QObject 통합
newQObject()를 사용하여 QObject (또는 하위 클래스) 포인터를 래핑합니다. newQObject()는 프록시 스크립트 객체를 반환하며, QObject 의 속성, 자식, 신호 및 슬롯을 프록시 객체의 속성으로 사용할 수 있습니다. Qt 메타 객체 시스템을 사용하여 동적으로 수행되므로 바인딩 코드가 필요하지 않습니다.
QPushButton *버튼 = new QPushButton;QJSValue scriptButton = myEngine.newQObject(button); myEngine.globalObject().setProperty("button", scriptButton); myEngine.evaluate("button.checkable = true"); qDebug() << scriptButton.property("checkable").toBool(); scriptButton.property("show").call(); // show() 슬롯을 호출
newQMetaObject()를 사용하여 QMetaObject 을 래핑하면 QObject-기반 클래스의 "스크립트 표현"이 제공됩니다. newQMetaObject()는 프록시 스크립트 객체를 반환하며, 클래스의 열거형 값은 프록시 객체의 프로퍼티로 사용할 수 있습니다.
메타 객체 시스템에 노출된 생성자( Q_INVOKABLE)를 사용하여 스크립트에서 호출하여 JavaScriptOwnership 을 사용하여 새 QObject 인스턴스를 만들 수 있습니다. 예를 들어 다음 클래스 정의가 있다고 가정해 보겠습니다:
class MyObject : public QObject { Q_OBJECT public: Q_INVOKABLE MyObject() {} };
이 클래스의 staticMetaObject
은 다음과 같이 자바스크립트에 노출될 수 있습니다:
QJSValue jsMetaObject = engine.newQMetaObject(&MyObject::staticMetaObject); engine.globalObject().setProperty("MyObject", jsMetaObject);
그러면 클래스의 인스턴스를 자바스크립트로 생성할 수 있습니다:
engine.evaluate("var myObject = new MyObject()");
동적 QObject 속성
동적 QObject 속성은 지원되지 않습니다. 예를 들어 다음 코드는 작동하지 않습니다:
QJSEngine engine;QObject *myQObject = new QObject(); myQObject->setProperty("dynamicProperty", 3);QJSValue myScriptQObject = engine.newQObject(myQObject); engine.globalObject().setProperty("myObject", myScriptQObject); qDebug() << engine.evaluate("myObject.dynamicProperty").toInt();
확장
QJSEngine은 호환되는 ECMAScript 구현을 제공합니다. 기본적으로 로깅과 같은 익숙한 유틸리티는 사용할 수 없지만 installExtensions() 함수를 통해 설치할 수 있습니다.
QJSValue, 애플리케이션 스크립트 가능 만들기 및 JavaScript 객체 및 함수 목록도참조하세요 .
멤버 유형 문서
열거형 QJSEngine::Extension
플래그 QJSEngine::익스텐션
이 열거형은 installExtensions()를 통해 설치할 확장을 지정하는 데 사용됩니다.
상수 | 값 | 설명 |
---|---|---|
QJSEngine::TranslationExtension | 0x1 | 번역 함수(예:qsTr() )를 설치해야 함을 나타냅니다. Qt XML도 설치합니다.uiLanguage 속성. |
QJSEngine::ConsoleExtension | 0x2 | 콘솔 함수(예:console.log() )를 설치해야 함을 나타냅니다. |
QJSEngine::GarbageCollectionExtension | 0x4 | 가비지 컬렉션 함수(예:gc() )를 설치해야 함을 나타냅니다. |
QJSEngine::AllExtensions | 0xffffffff | 모든 확장을 설치해야 함을 나타냅니다. |
번역 확장
스크립트 번역 함수와 C++ 번역 함수 간의 관계는 다음 표에 설명되어 있습니다:
스크립트 함수 | 해당 C++ 함수 |
---|---|
qsTr() | QObject::tr() |
QT_TR_NOOP() | QT_TR_NOOP() |
qsTranslate() | QCoreApplication::translate() |
QT_TRANSLATE_NOOP() | QT_TRANSLATE_NOOP() |
qsTrId() | qtTrId() |
QT_TRID_NOOP() | QT_TRID_NOOP() |
이 플래그는 또한 문자열 프로토타입에 arg()
함수를 추가합니다.
자세한 내용은 Qt를 사용한 국제화 문서를 참조하십시오.
ConsoleExtension
콘솔 객체는 console.log()
와 같은 친숙한 로깅 함수를 제공하는 콘솔 API의 하위 집합을 구현합니다.
추가된 함수 목록은 다음과 같습니다:
console.assert()
console.debug()
console.exception()
console.info()
console.log()
(console.debug()
와 동일 )console.error()
console.time()
console.timeEnd()
console.trace()
console.count()
console.warn()
print()
(console.debug()
와 동일)
자세한 내용은 콘솔 API 설명서를 참조하세요.
GarbageCollectionExtension
gc()
함수는 collectGarbage()를 호출하는 것과 동일합니다.
Extensions 유형은 QFlags<Extension>에 대한 typedef입니다. 확장자 값의 OR 조합을 저장합니다.
enum QJSEngine::ObjectOwnership
ObjectOwnership은 해당 JavaScript 객체가 엔진에 의해 가비지 수집될 때 JavaScript 메모리 관리자가 QObject 을 자동으로 삭제할지 여부를 제어합니다. 두 가지 소유권 옵션이 있습니다:
Constant | 값 | 설명 |
---|---|---|
QJSEngine::CppOwnership | 0 | 해당 객체는 C++ 코드에 의해 소유되며 JavaScript 메모리 관리자는 절대 삭제하지 않습니다. 이러한 객체에는 JavaScript destroy() 메서드를 사용할 수 없습니다. 이 옵션은 QScriptEngine::QtOwnership과 유사합니다. |
QJSEngine::JavaScriptOwnership | 1 | 객체는 JavaScript가 소유합니다. 객체가 메서드 호출의 반환 값으로 JavaScript 메모리 관리자에게 반환될 때 객체에 대한 나머지 JavaScript 참조가 없고 QObject::parent()가 없는 경우 JavaScript 메모리 관리자는 객체를 추적하고 삭제합니다. QJSEngine 하나가 추적하는 객체는 해당 QJSEngine 객체의 소멸자 중에 삭제됩니다. 따라서 두 엔진 중 하나가 삭제되면 서로 다른 엔진에서 JavaScriptOwnership을 가진 객체 간의 JavaScript 참조는 유효하지 않습니다. 이 옵션은 QScriptEngine::ScriptOwnership과 유사합니다. |
일반적으로 애플리케이션은 객체의 소유권을 명시적으로 설정할 필요가 없습니다. JavaScript 메모리 관리자는 휴리스틱을 사용하여 기본 소유권을 설정합니다. 기본적으로 JavaScript 메모리 관리자에 의해 생성된 객체는 JavaScriptOwnership을 갖습니다. QQmlComponent::create () 또는 QQmlComponent::beginCreate()을 호출하여 생성된 루트 객체는 예외로, 기본적으로 CppOwnership을 갖습니다. 이러한 루트 수준 객체의 소유권은 C++ 호출자에게 이전된 것으로 간주됩니다.
자바스크립트 메모리 관리자에 의해 생성되지 않은 객체는 기본적으로 CppOwnership을 갖습니다. 예외적으로 C++ 메서드 호출에서 반환된 객체는 소유권이 JavaScriptOwnership으로 설정됩니다. 이는 Q_INVOKABLE 메서드 또는 슬롯의 명시적 호출에만 적용되며 프로퍼티 게터 호출에는 적용되지 않습니다.
setObjectOwnership()를 호출하면 기본 소유권이 재정의됩니다.
데이터 소유권도참조하세요 .
속성 문서
uiLanguage : QString
이 속성에는 사용자 인터페이스 문자열 번역에 사용할 언어가 저장됩니다.
이 프로퍼티에는 사용자 인터페이스 문자열 번역에 사용할 언어의 이름이 저장됩니다. QJSEngine::TranslationExtension 이 엔진에 설치되면 Qt.uiLanguage
으로 읽기 및 쓰기용으로 노출됩니다. 항상 QQmlEngine 의 인스턴스에 노출됩니다.
값을 자유롭게 설정하여 바인딩에 사용할 수 있습니다. 애플리케이션에 번역기를 설치한 후에 설정하는 것이 좋습니다. 일반적으로 빈 문자열은 소스 코드에 사용된 언어의 번역이 수행되지 않음을 의미합니다.
액세스 기능:
QString | uiLanguage() const |
void | setUiLanguage(const QString &language) |
알림 신호:
void | uiLanguageChanged() |
멤버 함수 문서
QJSEngine::QJSEngine()
QJSEngine 객체를 생성합니다.
globalObject()는 ECMA-262, 섹션 15.1에 설명된 대로 속성을 갖도록 초기화됩니다.
[explicit]
QJSEngine::QJSEngine(QObject *parent)
주어진 parent 로 QJSEngine 객체를 생성합니다.
globalObject()는 ECMA-262, 섹션 15.1에 설명된 대로 속성을 갖도록 초기화됩니다.
[override virtual noexcept]
QJSEngine::~QJSEngine()
이것을 파괴합니다 QJSEngine.
QJSEngine 파괴 중에는 영구 JS 힙에서 가비지가 수집되지 않습니다. 모든 메모리를 비워야 하는 경우 QJSEngine 을 파괴하기 직전에 collectGarbage()를 수동으로 호출하세요.
[since Qt 6.1]
QJSValue QJSEngine::catchError()
예외가 현재 보류 중인 경우 예외를 잡아 QJSValue 로 반환합니다. 그렇지 않으면 정의되지 않은 QJSValue 으로 반환합니다. 이 메서드를 호출한 후 hasError()는 false
을 반환합니다.
이 함수는 Qt 6.1에 도입되었습니다.
template <typename From, typename To> To QJSEngine::coerceValue(const From &from)
주어진 from 을 템플릿 유형 To
으로 변환하여 반환합니다. 변환은 자바스크립트 시맨틱으로 이루어집니다. 이는 qvariant_cast 의 의미론과는 다릅니다. 기본적으로 qvariant_cast 에서 수행하지 않는 자바스크립트 등가 유형 간의 암시적 변환이 많이 있습니다. 이 메서드는 이 클래스의 다른 모든 변환 메서드를 일반화한 것입니다.
fromVariant(), qvariant_cast(), fromScriptValue() 및 toScriptValue()도 참조하세요 .
void QJSEngine::collectGarbage()
가비지 수집기를 실행합니다.
가비지 수집기는 스크립트 환경에서 더 이상 접근할 수 없는 객체를 찾아서 폐기하여 메모리를 회수하려고 시도합니다.
일반적으로는 이 함수를 호출할 필요가 없습니다. 가비지 수집기는 QJSEngine 가 그렇게 하는 것이 현명하다고 판단할 때(즉, 특정 수의 새 개체가 생성된 경우) 자동으로 호출됩니다. 그러나 이 함수를 호출하여 가비지 컬렉션을 가능한 한 빨리 수행하도록 명시적으로 요청할 수 있습니다.
QJSValue QJSEngine::evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, QStringList *exceptionStackTrace = nullptr)
lineNumber 을 기준선 번호로 사용하여 program 을 평가하고 평가 결과를 반환합니다.
스크립트 코드는 전역 객체의 컨텍스트에서 평가됩니다.
참고: QML 컨텍스트 내에서 평가해야 하는 경우 QQmlExpression 을 대신 사용하세요.
program 을 평가하면 엔진에서 exception 이 발생할 수 있으며, 이 경우 반환 값은 던져진 예외(일반적으로 Error
객체, QJSValue::isError() 참조)가 됩니다.
lineNumber 는 program 의 시작 줄 번호를 지정하는 데 사용되며, 이 평가와 관련된 엔진이 보고하는 줄 번호 정보는 이 인수를 기반으로 합니다. 예를 들어 program 이 두 줄의 코드로 구성되어 있고 두 번째 줄의 문이 스크립트 예외를 발생시키는 경우 예외 줄 번호는 lineNumber 에 1을 더한 값이 됩니다. 시작 줄 번호가 지정되지 않은 경우 줄 번호는 1을 기준으로 합니다.
fileName 는 오류 보고에 사용됩니다. 예를 들어, 오류 개체에서 이 함수가 제공된 경우 "fileName" 속성을 통해 파일 이름에 액세스할 수 있습니다.
exceptionStackTrace 는 잡히지 않은 예외가 발생했는지 여부를 보고하는 데 사용됩니다. QStringList 에 널이 아닌 포인터를 전달하면 스크립트에서 처리되지 않은 예외가 발생하면 "스택프레임 메시지" 목록으로, 그렇지 않으면 빈 목록으로 설정됩니다. 스택프레임 메시지는 함수 이름:줄 번호:열:파일 이름 형식입니다.
참고: 네이티브 함수의 경우 함수 이름과 파일 이름이 비어 있고 줄 번호와 열이 -1일 수 있는 경우도 있습니다.
참고: 예외가 발생하고 예외 값이 오류 인스턴스가 아닌 경우(예: QJSValue::isError()가 false
)를 반환하는 경우 예외 값이 계속 반환됩니다. exceptionStackTrace->isEmpty()
을 사용하여 값이 정상 반환 값인지 예외 반환 값인지 구분하세요.
QQmlExpression::evaluate도 참조하세요 .
template <typename T> T QJSEngine::fromManagedValue(const QJSManagedValue &value)
주어진 value 을 템플릿 유형 T
으로 변환하여 반환합니다.
toManagedValue() 및 coerceValue()도 참조하세요 .
template <typename T> T QJSEngine::fromPrimitiveValue(const QJSPrimitiveValue &value)
주어진 value 을 템플릿 유형 T
으로 변환하여 반환합니다.
QJSPrimitiveValue 에는 int, bool, double, QString, 그리고 JavaScript null
및 undefined
와 동등한 값만 저장할 수 있으므로 다른 유형을 요청하면 해당 값이 강제로 적용됩니다.
toPrimitiveValue() 및 coerceValue()도 참조하세요 .
template <typename T> T QJSEngine::fromScriptValue(const QJSValue &value)
주어진 value 을 템플릿 유형 T
으로 변환하여 반환합니다.
toScriptValue() 및 coerceValue()도 참조하세요 .
template <typename T> T QJSEngine::fromVariant(const QVariant &value)
주어진 value 을 템플릿 유형 T
으로 변환하여 반환합니다. 변환은 자바스크립트 시맨틱으로 이루어집니다. 이는 qvariant_cast 의 의미론과는 다릅니다. 기본적으로 qvariant_cast 에서 수행하지 않는 자바스크립트 등가 유형 간의 암시적 변환이 많이 있습니다.
coerceValue(), fromScriptValue() 및 qvariant_cast()도 참조하세요 .
QJSValue QJSEngine::globalObject() const
이 엔진의 글로벌 오브젝트를 반환합니다.
기본적으로 글로벌 객체에는 수학, 날짜 및 문자열과 같은 ECMA-262의 일부인 기본 제공 객체가 포함되어 있습니다. 또한 글로벌 오브젝트의 프로퍼티를 설정하여 모든 스크립트 코드에서 자신만의 확장을 사용할 수 있도록 할 수 있습니다. 스크립트 코드의 비로컬 변수는 글로벌 객체의 속성으로 생성되며, 글로벌 코드의 로컬 변수도 마찬가지입니다.
[since Qt 6.1]
bool QJSEngine::hasError() const
마지막 JavaScript 실행에서 예외가 발생했거나 throwError()이 호출된 경우 true
을 반환합니다. 그렇지 않으면 false
을 반환합니다. evaluate ()는 평가된 코드에서 던져진 모든 예외를 포착한다는 점에 유의하세요.
이 함수는 Qt 6.1에 도입되었습니다.
QJSValue QJSEngine::importModule(const QString &fileName)
fileName 에 있는 모듈을 임포트하고 내보낸 모든 변수, 상수 및 함수를 프로퍼티로 포함하는 모듈 네임스페이스 객체를 반환합니다.
엔진에서 모듈을 처음 임포트하는 경우, 로컬 파일 시스템 또는 Qt 리소스 시스템의 지정된 위치에서 파일을 로드하고 ECMAScript 모듈로 평가합니다. 파일은 UTF-8 텍스트로 인코딩될 것으로 예상됩니다.
이후 동일한 모듈을 가져오면 이전에 가져온 인스턴스가 반환됩니다. 모듈은 싱글톤이며 엔진이 소멸될 때까지 남아 있습니다.
지정된 fileName 은 내부적으로 QFileInfo::canonicalFilePath()을 사용하여 정규화됩니다. 즉, 서로 다른 상대 경로를 사용하여 디스크에 있는 동일한 파일을 여러 번 임포트하면 파일이 한 번만 로드됩니다.
참고: 모듈을 로드하는 동안 예외가 발생하면 반환 값은 예외(일반적으로 Error
객체, QJSValue::isError() 참조)가 됩니다.
registerModule()도 참조하세요 .
void QJSEngine::installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue())
자바스크립트 extensions 를 설치하여 표준 ECMAScript 구현에서 사용할 수 없는 기능을 추가합니다.
확장 프로그램은 지정된 object 또는 객체가 지정되지 않은 경우 Global Object 에 설치됩니다.
열거형 값을 OR
으로 지정하여 여러 확장을 한 번에 설치할 수 있습니다:
Extension 를참조하세요 .
bool QJSEngine::isInterrupted() const
자바스크립트 실행이 현재 중단되었는지 여부를 반환합니다.
setInterrupted()도 참조하세요 .
QJSValue QJSEngine::newArray(uint length = 0)
주어진 length 을 사용하여 Array 클래스의 JavaScript 객체를 생성합니다.
newObject()도 참조하세요 .
QJSValue QJSEngine::newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString())
오류 메시지로 message 를 포함하는 Error 클래스의 자바스크립트 객체를 생성합니다.
생성된 객체의 프로토타입은 errorType 입니다.
newObject(), throwError() 및 QJSValue::isError()도 참조하세요 .
QJSValue QJSEngine::newObject()
Object 클래스의 JavaScript 객체를 생성합니다.
생성된 객체의 프로토타입은 Object 프로토타입 객체가 됩니다.
newArray() 및 QJSValue::setProperty()도 참조하세요 .
template <typename T> QJSValue QJSEngine::newQMetaObject()
T
클래스와 연관된 정적 QMetaObject 을 래핑하는 자바스크립트 객체를 생성합니다.
newQObject() 및 QObject Integration도 참조하십시오 .
QJSValue QJSEngine::newQMetaObject(const QMetaObject *metaObject)
주어진 QMetaObject 을 래핑하는 자바스크립트 객체를 만듭니다. metaObject 은 스크립트 엔진보다 오래 지속되어야 합니다. 이 메서드는 정적 메타객체에만 사용하는 것이 좋습니다.
생성자로 호출되면 클래스의 새 인스턴스가 생성됩니다. Q_INVOKABLE 에 의해 노출된 생성자만 스크립트 엔진에서 볼 수 있습니다.
newQObject() 및 QObject Integration 을참조하세요 .
QJSValue QJSEngine::newQObject(QObject *object)
JavaScriptOwnership 을 사용하여 주어진 QObject object 을 래핑하는 자바스크립트 객체를 생성합니다.
object 의 신호와 슬롯, 프로퍼티 및 자식은 생성된 QJSValue 의 프로퍼티로 사용할 수 있습니다.
object 이 널 포인터인 경우 이 함수는 널 값을 반환합니다.
object 의 클래스(또는 그 슈퍼클래스, 재귀적으로)에 기본 프로토타입이 등록된 경우 새 스크립트 객체의 프로토타입은 해당 기본 프로토타입으로 설정됩니다.
지정된 object 이 엔진의 제어 범위를 벗어나 삭제된 경우, 스크립트 코드 또는 C++ 로 JavaScript 래퍼 객체를 통해 삭제된 QObject 의 멤버에 액세스하려고 시도하면 script exception 이 생성됩니다.
QJSValue::toQObject()도 참조하세요 .
[since 6.2]
QJSValue QJSEngine::newSymbol(const QString &name)
값이 name 인 Symbol 클래스의 JavaScript 객체를 생성합니다.
생성된 객체의 프로토타입은 Symbol 프로토타입 객체가 됩니다.
이 함수는 Qt 6.2에 도입되었습니다.
newObject()도 참조하십시오 .
[static]
QJSEngine::ObjectOwnership QJSEngine::objectOwnership(QObject *object)
object 의 소유권을 반환합니다.
setObjectOwnership() 및 QJSEngine::ObjectOwnership도 참조하십시오 .
bool QJSEngine::registerModule(const QString &moduleName, const QJSValue &value)
모듈로 사용할 QJSValue 을 등록합니다. 이 함수가 호출되면 moduleName 를 가져오는 모든 모듈은 파일 시스템에서 moduleName 를 로드하는 대신 value 의 값을 가져옵니다.
유효한 QJSValue 는 모두 등록할 수 있지만 명명된 내보내기(예: import { name } from "info"
는 객체의 멤버로 취급되므로 기본 내보내기는 QJSEngine 의 newXYZ 메서드 중 하나를 사용하여 만들어야 합니다.
이렇게 하면 파일시스템에 존재하지 않는 모듈을 가져올 수 있으므로 스크립팅 애플리케이션은 이를 사용하여 Node.js와 유사하게 내장 모듈을 제공할 수 있습니다.
성공하면 true
, 그렇지 않으면 false
을 반환합니다.
참고: QJSValue value 은 다른 모듈에서 사용할 때까지 호출되거나 읽히지 않습니다. 즉, 평가할 코드가 없으므로 다른 모듈이 이 모듈을 로드하는 동안 예외를 던지기 전까지는 오류가 표시되지 않습니다.
importModule()도 참조하세요 .
void QJSEngine::setInterrupted(bool interrupted)
자바스크립트 실행을 중단하거나 다시 활성화합니다.
interrupted 이 true
인 경우 이 엔진에서 실행되는 모든 JavaScript는 즉시 중단되고 interrupted 에 대해 false
값을 사용하여 이 함수를 다시 호출할 때까지 오류 객체를 반환합니다.
이 함수는 스레드 안전합니다. 예를 들어 자바스크립트에서 무한 루프를 중단하기 위해 다른 스레드에서 이 함수를 호출할 수 있습니다.
isInterrupted()도 참조하세요 .
[static]
void QJSEngine::setObjectOwnership(QObject *object, QJSEngine::ObjectOwnership ownership)
object 의 ownership 을 설정합니다.
JavaScriptOwnership
이 있는 객체는 참조가 없더라도 부모가 있는 한 가비지 수집되지 않습니다.
objectOwnership() 및 QJSEngine::ObjectOwnership도 참조하세요 .
[since Qt 5.12]
void QJSEngine::throwError(const QString &message)
주어진 message 으로 런타임 에러(예외)를 발생시킵니다.
이 메서드는 자바스크립트에서 throw()
표현식에 대응하는 C++ 메서드입니다. 이 메서드를 사용하면 C++ 코드가 런타임 오류를 QJSEngine 에 보고할 수 있습니다. 따라서 QJSEngine 을 통해 JavaScript 함수에 의해 호출된 C++ 코드에서만 호출해야 합니다.
C++에서 반환할 때 엔진은 정상적인 실행 흐름을 중단하고 지정된 message 이 포함된 오류 객체를 사용하여 미리 등록된 다음 예외 처리기를 호출합니다. 에러 객체는 자바스크립트 호출자 스택에서 가장 위에 있는 컨텍스트의 위치를 가리키며, 구체적으로 lineNumber
, fileName
및 stack
속성을 갖습니다. 이러한 프로퍼티는 Script Exceptions 에 설명되어 있습니다.
다음 예제에서는 FileAccess.cpp의 C++ 메서드가 readFileAsText()
이 호출되는 위치에서 qmlFile.qml에 오류를 던집니다:
// qmlFile.qml function someFunction() { ... var text = FileAccess.readFileAsText("/path/to/file.txt"); }
// FileAccess.cpp // Assuming that FileAccess is a QObject-derived class that has been // registered as a singleton type and provides an invokable method // readFileAsText() QJSValue FileAccess::readFileAsText(const QString & filePath) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) { jsEngine->throwError(file.errorString()); return QString(); } ... return content; }
자바스크립트에서 던져진 오류를 포착할 수도 있습니다:
// qmlFile.qml function someFunction() { ... var text; try { text = FileAccess.readFileAsText("/path/to/file.txt"); } catch (error) { console.warn("In " + error.fileName + ":" + "error.lineNumber" + ": " + error.message); } }
예외를 설명하기 위해 보다 구체적인 런타임 에러가 필요한 경우 throwError(QJSValue::ErrorType errorType, const QString &message) 오버로드를 사용할 수 있습니다.
이 함수는 Qt 5.12에 도입되었습니다.
Script Exceptions 를참조하십시오 .
[since 6.1]
void QJSEngine::throwError(const QJSValue &error)
이 함수는 throwError()를 오버로드합니다.
미리 구성된 런타임 error (예외)을 던집니다. 이렇게 하면 newErrorObject()를 사용하여 오류를 생성하고 필요에 따라 사용자 정의할 수 있습니다.
이 함수는 Qt 6.1에 도입되었습니다.
Script Exceptions 및 newErrorObject()도 참조하십시오 .
[since Qt 5.12]
void QJSEngine::throwError(QJSValue::ErrorType errorType, const QString &message = QString())
이 함수는 throwError()를 오버로드합니다.
주어진 errorType 와 message 로 런타임 에러(예외)를 던집니다.
// Assuming that DataEntry is a QObject-derived class that has been // registered as a singleton type and provides an invokable method // setAge(). void DataEntry::setAge(int age) { if (age < 0 || age > 200) { jsEngine->throwError(QJSValue::RangeError, "Age must be between 0 and 200"); } ... }
이 함수는 Qt 5.12에 도입되었습니다.
Script Exceptions 및 newErrorObject()도 참조하십시오 .
template <typename T> QJSManagedValue QJSEngine::toManagedValue(const T &value)
주어진 value 으로 QJSManagedValue 을 만듭니다.
fromManagedValue() 및 coerceValue()도 참조하세요 .
template <typename T> QJSPrimitiveValue QJSEngine::toPrimitiveValue(const T &value)
주어진 value 으로 QJSPrimitiveValue 을 생성합니다.
QJSPrimitiveValue 에는 int, bool, double, QString, 그리고 JavaScript null
및 undefined
와 동등한 값만 저장할 수 있으므로 다른 유형을 전달하면 값이 적극적으로 강제로 적용됩니다.
fromPrimitiveValue() 및 coerceValue()도 참조하세요 .
template <typename T> QJSValue QJSEngine::toScriptValue(const T &value)
주어진 value 으로 QJSValue 을 만듭니다.
fromScriptValue() 및 coerceValue()도 참조하세요 .
관련 비회원
QJSEngine *qjsEngine(const QObject *object)
object 과 연결된 QJSEngine 을 반환합니다(있는 경우).
이 함수는 QObject 을 자바스크립트 환경에 노출한 후 나중에 프로그램에서 다시 액세스하려는 경우에 유용합니다. QJSEngine::newQObject ()에서 반환된 래퍼를 유지할 필요는 없습니다.
© 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.