crossplatform.ru

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


  Ответ в QWebFrame::findFirstElement() не работает..
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Адонай Дата 13.5.2013, 7:26
  Такая же проблема. И точно так же - выполняется не в GUI-потоке. Видимо, в этом и дело.
cray8 Дата 2.5.2013, 15:54
  Здравствуйте, ситуация следующая
Есть класс 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 в другом потоке или еще что другое? Кто нибудь посоветуйте куда смотреть..
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 21.2.2020, 11:19