Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QWebFrame::findFirstElement() не работает..
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Script. Интеграция WebKit
cray8
Здравствуйте, ситуация следующая
Есть класс 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 в другом потоке или еще что другое? Кто нибудь посоветуйте куда смотреть..
Адонай
Такая же проблема. И точно так же - выполняется не в GUI-потоке. Видимо, в этом и дело.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.