示例#1
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    ui->setupUi(this);

    connect(&this->test,SIGNAL(updateState(QString)),this,SLOT(updateStatus(QString)));
    connect(&this->test,SIGNAL(workFinish(QList<QString>)),this,SLOT(on_finished(QList<QString>)));

}
void ExportWizard::exportData(QSqlDatabase &source, QSqlDatabase &target)
{
    setOptions(QWizard::DisabledBackButtonOnLastPage);
    button(QWizard::FinishButton)->setEnabled(false);
    QStringList tableNameList = exportInfo->getUseTableList();
    workThread = new ExportWorkThread(source, tableNameList, target);
    connect(workThread, SIGNAL(finished()), this, SLOT(workFinish()));
    connect(workThread, SIGNAL(finishPos(int)), this, SLOT(setProgress(int)));
    exportFinishInfo->progressBar->setMaximum(tableNameList.size());
    workThread->start();
}
示例#3
0
void AbstractReptile::handleReply(QNetworkReply *reply)
{
    if(reply->error()!=QNetworkReply::NoError)//请求错误
    {
        if(!this->data.isEmpty())
            this->save();
        emit requestError(QString("reply error:")+reply->errorString());
        if(this->replyError())
        {
            return;
        }
    }
    this->replyData=reply->readAll();
    reply->deleteLater();
    QString text=QString::fromUtf8(this->replyData);
    //-----------------解析网页,获得数据--------------------

    emit this->updateState(QString("update:request text from ")+this->currentUrl.url());

    int initCount=this->data.size();
    if(this->analysisData.isEmpty())
    {
        this->getData(text,this->data);
    }
    else
    {
        QRegExp reg=this->analysisData;
        int pos = 0;
        int count=0;
        while ((pos = reg.indexIn(text, pos)) != -1)
        {
            QString line=reg.cap(0);

            if(!line.isEmpty())
            {
                this->data.insert(line,0);
            }
            count++;
            pos += reg.matchedLength();
        }
    }
    if(data.size()<=initCount)
    {
        emit getDataError(QString("none data capture."));
        if(analysisDataError())
        {
            return;
        }
    }

    emit this->updateState(QString("update:get data ")+QString::number(data.size()-initCount));


    //-----------------解析网页,获得下一个网址---------------
    this->allUrl.insert(this->currentUrl.url(),-1);
    if(this->analysisNextUrl.isEmpty())
    {
        this->getNextUrl(text,this->currentUrl);
    }
    else
    {
        QRegExp reg=this->analysisNextUrl;
        int pos = 0;
        if((pos = reg.indexIn(text, pos)) != -1)
        {
            QString line=reg.cap(0);
            if(!line.isEmpty())
            {
                this->currentUrl=this->captureToUrl(line,this->currentUrl);
            }
            else
            {
                this->currentUrl=QUrl();
            }

        }
    }

    if(currentUrl.isEmpty())
    {
        emit getDataError(QString("none data capture."));
        if(analysisDataError())
        {
            return;
        }
    }

    emit this->updateState(QString("update:get next url ")+this->currentUrl.url());

    //-----------------验证终止-----------------------------
    if(finishWork(text))
    {
        emit this->updateState(QString("update:finish at finishWork()"));
        emit workFinish(this->data.keys());
        return;
        this->save();
    }
    if(allUrl.find(this->currentUrl.url())!=allUrl.end())
    {
        emit this->updateState(QString("update:finish : same url"));
        emit workFinish(this->data.keys());
        return;
        this->save();
    }
    if(this->currentUrl.isEmpty())
    {
        emit this->updateState(QString("update:finish empty url"));
        this->save();
        return;
    }
    //----------------开始下一个网页-------------------------
    emit this->updateState(QString("update:request url ")+this->currentUrl.url());

    this->manager->get(QNetworkRequest(this->currentUrl));
}