Как использовать QJSEngine для доступа к дочернему элементу QObject в js-скрипте?
Из официального документа Qt Doc написано:
Сигналы и слоты, свойства и дочерние объекты доступны в качестве свойств созданного QJSValue.
Поэтому я ожидаю получить доступ к дочерним объектам QObject, но я не могу найти правильный способ сделать это.
У меня есть код, как показано ниже:
QWidget parent;
QLabel label(&parent);
label.setText("Hello World");
QJSEngine engine;
QJSValue jsv = engine.newQObject(&parent);
engine.globalObject().setProperty("w", jsv);
qDebug() << engine.evaluate("JSON.stringify(w);").toString();
// qDebug() << engine.evaluate("w.myLabel.text").toString(); // Does not work, how to access myLabel.text in script
Вывод отладки показан ниже, но я не могу найти информацию о дочерней метке (например, текст "Hello World") в этом выводе. Итак, мой вопрос, как получить доступ к QLabel (objectName: "myLabel") в сценарии js?
{
"objectName": "",
"modal": false,
"windowModality": 0,
"enabled": true,
"geometry": {},
"frameGeometry": {},
"normalGeometry": {},
"x": 0,
"y": 0,
"pos": {},
"frameSize": {},
"size": {},
"width": 640,
"height": 480,
"rect": {},
"childrenRect": {},
"childrenRegion": {},
"sizePolicy": {},
"minimumSize": {},
"maximumSize": {},
"minimumWidth": 0,
"minimumHeight": 0,
"maximumWidth": 16777215,
"maximumHeight": 16777215,
"sizeIncrement": {},
"baseSize": {},
"palette": {},
"font": {},
"cursor": {},
"mouseTracking": false,
"isActiveWindow": false,
"focusPolicy": 0,
"focus": false,
"contextMenuPolicy": 1,
"updatesEnabled": true,
"visible": false,
"minimized": false,
"maximized": false,
"fullScreen": false,
"sizeHint": {},
"minimumSizeHint": {},
"acceptDrops": false,
"windowTitle": "",
"windowIcon": {},
"windowIconText": "",
"windowOpacity": 1,
"windowModified": false,
"toolTip": "",
"toolTipDuration": -1,
"statusTip": "",
"whatsThis": "",
"accessibleName": "",
"accessibleDescription": "",
"layoutDirection": 0,
"autoFillBackground": false,
"styleSheet": "",
"locale": {},
"windowFilePath": "",
"inputMethodHints": 0
}