crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

id2606
  опции профиля:
сообщение 17.4.2013, 7:08
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 5.9.2012
Пользователь №: 3510

Спасибо сказали: 0 раз(а)




Репутация:   0  


В своем проекте я использую QWebPage.

Добавляю в него свой объект

m_scriptPage->mainFrame()->addToJavaScriptWindowObject("JSB", this);


в скрипте на странице вызываю функцию и указываю селектор например

    var e = JSB.findElements ("input");


Реализация

    QWebElement JSB::findElement (QString selector)
    {
        QWebElement doc = m_scriptPage->mainFrame()->documentElement ();
        return doc.findFirst();
    }


Если я ищу один элемент как в примере выше, то никаких проблем нет.
Но я никак не могу вернуть массив элементов!

если пытаюсь вернуть QWebElementCollection, то скрипт ругается что он не знает тип данных QWebElementCollection;
в QVariantList я не могу засунусь QWebElement.

Подскажите как мне вернуть массив элементов типа QWebElemnt и массив QObject* Так чтобы JavaScript на странице не ругался что он не знает что это такое.

Еще пытался вернуть другой свой объект типа

    class JSBElement : public QObject { ... }
     
     
    JSBElement JSB::getElement (QString selector)
    {
        QWebElement doc = m_scriptPage->mainFrame()->documentElement ();
        QWebElement e1 = doc.findFirst(selector);
     
        JSBElement e(e1);
        return e;
    }


JavaScript точно также ругался что не знает что такое JSBElement, но если вернуть JSBElement*, то все работает прекрасно.
Единственная проблема я не знаю когда мне можно удалять JSBElement.

    class JSBElement : public QObject { ... }
     
     
    QObject* JSB::getElement (QString selector)
    {
        QWebElement doc = m_scriptPage->mainFrame()->documentElement ();
        QWebElement e1 = doc.findFirst(selector);
     
        return new JSBElement (el);
    }


Вызовов функции из скрипта JSB.findElement может быть сколько угодно и работать скрипт может бесконечно, а значит память будет постоянно съедаться что недопустимо.

Подскажите как мне это все обойти и вообще в каком направлении рыть ? Вроде и вопрос простой, но не могу найти/сделать решение уже сутки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 14.6.2025, 13:00