crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QWebFrame::findFirstElement() не работает..
Гость_cray8_*
сообщение 2.5.2013, 15:54
Сообщение #1





Гости








    


Здравствуйте, ситуация следующая
Есть класс MyThread, наследованный от QThread, у которого есть имеются члены QScriptEngine m_engine и MyWebView* m_pView. И MyWebView, наследованный соответственно от QWebView с членами QMutex m_mutex и QWaitCondition m_condition.
Запускаю поток из главного окна
MyThread::run() {
m_engine.evalute(m_scriptPath);
}

В скрипте, который обрабатывает m_engine следующее
obj.loadUrl('http://someurl.tld');
obj.getElementGeometry('div');


Методом MyThread:: loadUrl(QString url) отсылаю сигнал loadUrlRequested(url) присоединенный к слоту MyWebView::loadUrl(QString url), и жду пока страница загрузится, собственно код:

void MyThread::loadUrl(QString url) {
    int msec = 15000;
    emit this->loadUrlRequested(url);
    m_pView->m_mutex.lock();
    m_pView->m_condition.wait(&m_pView->m_mutex, msec);
    m_pView->m_mutex.unlock();
}

MyThread::MyThread(QObject *parent) {
....
connect(this, SIGNAL(loadUrlRequested(QString)), m_pView, SLOT(loadUrl(QString)));
....
}

void MyWebView::loadUrl(QString url) {
    this->load(QUrl(url));
}
MyWebView::MyWebView(QWidget *parent) {
....
connect(this, SIGNAL(loadFinished(bool)), this, SLOT(wakeup()));
}
void MyWebView::wakeup() {
m_condition.wakeOne();
}

В скрипте после вызова метода загрузки страницы идет метод obj.getElementGeometry('div'), его реализация:

QVariantMap MyThread::getElementGeometry(QString selector) {
QVariantMap map;
QWebElement element = m_pView->page()->mainFrame()->findFirstElement(selector);
qDebug() << m_pView->page->mainFrame()->toHtml(); //  <html><head></head><body><div>test</div></body></html>
qDebug() << QString("%1").arg(element.isNull()); // "1"
map.insert("w", element.geometry().width());
return map;
}

Вывод m_pView->page->mainFrame()->toHtml() содержит элемент <div>, т.е. как я понимаю, страницы загружена и все должно работать..
Может проблема в том что m_pView в другом потоке или еще что другое? Кто нибудь посоветуйте куда смотреть..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Адонай_*
сообщение 13.5.2013, 7:26
Сообщение #2





Гости








    


Такая же проблема. И точно так же - выполняется не в GUI-потоке. Видимо, в этом и дело.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 3.4.2020, 23:49