Russian Qt Forum
Ноябрь 25, 2024, 14:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebFrame::findFirstElement() не работает..  (Прочитано 3213 раз)
cray8
Гость
« : Май 02, 2013, 13:17 »

Здравствуйте, ситуация следующая
Есть класс MyThread, наследованный от QThread, у которого есть имеются члены QScriptEngine m_engine и MyWebView* m_pView. И MyWebView, наследованный соответственно от QWebView с членами QMutex m_mutex и QWaitCondition m_condition.
Запускаю поток из главного окна
Код
C++ (Qt)
MyThread::run() {
m_engine.evalute(m_scriptPath);
}
В скрипте, который обрабатывает m_engine следующее
Код
Javascript
obj.loadUrl('http://someurl.tld');
obj.getElementGeometry('div');

Методом MyThread:: loadUrl(QString url) отсылаю сигнал loadUrlRequested(url) присоединенный к слоту MyWebView::loadUrl(QString url), и жду пока страница загрузится, собственно код:
Код
C++ (Qt)
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'), его реализация:
Код
C++ (Qt)
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 в другом потоке или еще что другое? Кто нибудь посоветуйте куда смотреть..
« Последнее редактирование: Май 02, 2013, 13:21 от cray8 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.177 секунд. Запросов: 21.