Здравствуйте, ситуация следующая
Есть класс MyThread, наследованный от QThread, у которого есть имеются члены QScriptEngine m_engine и MyWebView* m_pView. И MyWebView, наследованный соответственно от QWebView с членами QMutex m_mutex и QWaitCondition m_condition.
Запускаю поток из главного окна
MyThread::run() {
m_engine.evalute(m_scriptPath);
}
obj.loadUrl('http://someurl.tld');
obj.getElementGeometry('div');
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();
}
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;
}
Такая же проблема. И точно так же - выполняется не в GUI-потоке. Видимо, в этом и дело.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)