Здравствуйте, гость ( Вход | Регистрация )
Гость_lanz_* | Дата 17.4.2013, 15:11 |
Цитата Я же не могу достучаться до QScriptEngine который находится в QWebFrame. И действительно Цитата In general its advised to use care when passing QObjects as arguments, as those objects don't become owned by the JavaScript engine; That means that the application developer has to be extra careful not to try to access QObjects that have already been deleted by the native environment. Вопрос на засыпку. Почему не использовать JavaScript(document.getElement...) чтобы траверсить DOM? Раскрывающийся текст Не получается авторизоваться, прошу прощения |
|
id2606 | Дата 17.4.2013, 13:20 |
Объекты, наследуемые от QObject копировать нельзя. Поэтому вот это:
Правильное решение. Для того чтобы объекты удалялись GC движка нужно выставить им Script Ownership. Как сделать это, читайте здесь: http://qt-project.org/doc/qt-4.8/scripting...bject-ownership Так я не могу понять где указывать Script Ownership Я же не могу достучаться до QScriptEngine который находится в QWebFrame. |
|
lanz | Дата 17.4.2013, 11:53 |
Объекты, наследуемые от QObject копировать нельзя. Поэтому вот это:
Правильное решение. Для того чтобы объекты удалялись GC движка нужно выставить им Script Ownership. Как сделать это, читайте здесь: http://qt-project.org/doc/qt-4.8/scripting...bject-ownership |
|
id2606 | Дата 17.4.2013, 11:24 |
Чтобы засунуть в QVariant надо выполнить Q_DECLARE_METATYPE. Чтобы свой кастомный объект, qScriptRegisterMetatype. Про время жизни QObject читать тут http://qt-project.org/doc/qt-4.8/scripting...bject-ownership Q_DECLARE_METATYPE (JSBElement) я конечно же сделал А вот как заставить движек JavaScript видеть мой объект JSBElement не знаю. Он на него всеравно ругается. А что бы зарегить его в пространстве ScriptEngine в JavaScript нужно сначала получить доступ к нему. А его нигде не дают. Другие пути еще не нашел. Сделал все через обертку. Как засунуть свой объект в QVariantList я разобрался Достаточно сделать так
|
|
lanz | Дата 17.4.2013, 10:59 |
Чтобы засунуть в QVariant надо выполнить Q_DECLARE_METATYPE. Чтобы свой кастомный объект, qScriptRegisterMetatype. Про время жизни QObject читать тут http://qt-project.org/doc/qt-4.8/scripting...bject-ownership |
|
id2606 | Дата 17.4.2013, 7:08 |
В своем проекте я использую QWebPage. Добавляю в него свой объект
в скрипте на странице вызываю функцию и указываю селектор например
Реализация
Если я ищу один элемент как в примере выше, то никаких проблем нет. Но я никак не могу вернуть массив элементов! если пытаюсь вернуть QWebElementCollection, то скрипт ругается что он не знает тип данных QWebElementCollection; в QVariantList я не могу засунусь QWebElement. Подскажите как мне вернуть массив элементов типа QWebElemnt и массив QObject* Так чтобы JavaScript на странице не ругался что он не знает что это такое. Еще пытался вернуть другой свой объект типа
JavaScript точно также ругался что не знает что такое JSBElement, но если вернуть JSBElement*, то все работает прекрасно. Единственная проблема я не знаю когда мне можно удалять JSBElement.
Вызовов функции из скрипта JSB.findElement может быть сколько угодно и работать скрипт может бесконечно, а значит память будет постоянно съедаться что недопустимо. Подскажите как мне это все обойти и вообще в каком направлении рыть ? Вроде и вопрос простой, но не могу найти/сделать решение уже сутки. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 14:17 |