[webkit-qt] can't receive signal

周鹏 zhoupeng19 at 126.com
Wed Apr 6 06:27:15 PDT 2011

Dear webkit-qt, 
   I use this code to parse the redirect html page,but i have two question,i can't fix them:
1)the initialLayoutCompleted signal is never emit in my program;
2)i just catch the loadFinished signal,and quit,but when the first time i call parse function,it's work correctly,but the second time,it's blocked,it's can't catch the done() signal,it's can't quit exec().Can any one tell me how to resolve this?

class NetworkAccessManagerProxy : public QNetworkAccessManager 
    virtual QNetworkReply* createRequest(Operation op, const QNetworkRequest& request, QIODevice *outgoingData)
        NetworkReply* reply = new NetworkReply();
        reply->setHttpStatusCode(200, "ok" );
     return reply;
class QtParser : public QObject
    QtParser(int timeout);
    int parse(const char* content, const char* start_url, std::string* target, bool completelyParse = false); 
 void output();
public slots:
    void loadDone(bool ok);
    void layoutDone();
    void timeoutSlot();
    void urlChanged(const QUrl &url);
 QApplication* m_app;
 QTimer* m_timer;
 NetworkAccessManagerProxy* m_nam;
    QWebPage* m_page;
    bool m_layoutFinished;
    bool m_loadFinished;
    int m_timeout;
    void finished();
    void timeout();
    void done();
    void error();
int argc = 1;
char* argv[] = {"JSParser"};
QtParser::QtParser(int timeout): QObject()
 m_app = new QApplication(argc, argv);
 QWebSettings * settings = QWebSettings::globalSettings();
    settings->setAttribute(QWebSettings::AutoLoadImages, false);
    settings->setAttribute(QWebSettings::JavascriptEnabled, true);
    settings->setAttribute(QWebSettings::JavaEnabled, false);
    settings->setAttribute(QWebSettings::PluginsEnabled, false);
    settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, false);
    QObject::connect(this, SIGNAL(done()), m_app, SLOT(quit()));
    QObject::connect(this, SIGNAL(error()), m_app, SLOT(quit()));
    QObject::connect(this, SIGNAL(timeout()), m_app, SLOT(quit()));
    m_page = new QWebPage();
 QObject::connect(m_page->mainFrame(), SIGNAL(loadFinished(bool)), this, SLOT(loadDone(bool)));
 QObject::connect(m_page->mainFrame(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(urlChanged(const QUrl &)));
 QObject::connect(m_page->mainFrame(), SIGNAL(initialLayoutCompleted()), this, SLOT(layoutDone()));//the initialLayoutCompleted signal is never emit in this program
 m_nam = new NetworkAccessManagerProxy();
 m_timer = new QTimer(this);
 m_timeout = timeout;
 returnCode = 0;
void QtParser::parse(const char* content, const char* url)
 m_layoutFinisahed = false;
 m_loadFinished = false;
 QObject::connect(m_timer, SIGNAL(timeout()), this, SLOT(timeoutSlot()));
 m_page->mainFrame()->setHtml(QString(content), QUrl(url));
 return ;
void QtParser::urlChanged(const QUrl &url)
 qDebug() << url;
void QtParser::layoutDone()
 m_layoutFinished = true;
void QtParser::loadDone(bool ok)
    if (!ok) 
        emit error(); 
    m_loadFinished = true;
    m_layoutFinished = true;//because the initialLayoutCompleted is never emit,so i must use this code to driven the program 
 emit done();
void QtParser::timeoutSlot()
 emit timeout();

void QtParser::output()
 if(m_loadFinished && m_layoutFinished)
     emit done();
int main(int argc, char **argv)
 QtParser parser(500);
 //source is the html code of the page
 parser.parse(source, url);
 parser.parse(source, url);//my program is blocked at here
 return 0;
<html xmlns="http://www.w3.org/1999/xhtml"> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <script language="javascript"> location.replace("default/index.aspx") </script> 

Sincerely yours, 
Zhou Peng 
zhoupeng19 at 126.com 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-qt/attachments/20110406/86c4230e/attachment-0001.html>

More information about the webkit-qt mailing list