總結

1.利用http的get方法加載本地網頁
(1)QT += network
表明我們使用了網絡模塊。
(2在widget.ui文件中添加一個 Text Browser
(3)
//MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtNetwork/QtNetwork>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *manager;
private slots:
    void replyFinished(QNetworkReply *);
};

#endif // MAINWINDOW_H

//MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QUrl>
#include <QTextCodec>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    manager = new QNetworkAccessManager(this);  //新建QNetworkAccessManager對象
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
    manager->get(QNetworkRequest(QUrl("http://www.yafeilinux.com"))); //發送請求
}

void MainWindow::replyFinished(QNetworkReply *reply)  //當回覆結束後
{
    QTextCodec *codec = QTextCodec::codecForName("utf8");
    //使用utf8編碼,這樣纔可以顯示中文
    QString all = codec->toUnicode(reply->readAll());
    ui->textBrowser->setText(all);
    reply->deleteLater();   //最後要釋放reply對象
}

MainWindow::~MainWindow()
{
    delete ui;
}

2.帶有下載進度的
.ui
這裏寫圖片描述
//.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtNetwork/QtNetwork>
#include <QUrl>
#include <QFile>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void startRequest();
private slots:
    void on_pushButton_clicked();  //單擊下載按鈕時
    void httpReady();
    void httpFinish();
    void updata(qint64 bytesRead, qint64 totalBytes);
private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *manger;   //管理類
    QNetworkReply *reply;
    QUrl url;  //存儲網址
    QFile *file;
};

#endif // MAINWINDOW_H

//.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QUrl>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    manger = new QNetworkAccessManager();
    ui->progressBar->hide();  //下載開始時先隱藏這個進度條
}

void MainWindow::startRequest()
{
    reply = manger->get(QNetworkRequest(url));
        //下面關聯信號和槽
    connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));
        //下載完成後
    connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
        //有可用數據時
    connect(reply,SIGNAL(downloadProgress(qint64,qint64)),
                this,SLOT(updateDataReadProgress(qint64,qint64)));
        //更新進度條
}


void MainWindow::httpReady()
{
    if (file) file->write(reply->readAll());  //如果文件存在,則寫入文件
}

void MainWindow::httpFinish()
{
    ui->progressBar->hide();
    file->flush();
    file->close();
    reply->deleteLater();
    reply = 0;
    delete file;
    file = 0;
}

void MainWindow::updata(qint64 bytesRead, qint64 totalBytes)
{
    ui->progressBar->setMaximum(totalBytes); //最大值
    ui->progressBar->setValue(bytesRead);  //當前值
}

void MainWindow::on_pushButton_clicked()
{
    ui->lineEdit->text();  //獲取lineEdit上面的url地址
    //分解出文件名
    QFile info(url.path());
    QString filename(info.fileName());
    //獲取文件名
    if(filename.isEmpty()){
        filename = "index.html";
    }
    file = new QFile(filename);
    if( !file->open(QIODevice::ReadOnly)){
        qDebug()<<"open error"<<endl;
        delete file;
        file = 0;
        return ;
    }
    startRequest();
    ui->progressBar->setValue(0);
    ui->progressBar->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

3.帶有loading框的
//.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QLabel>
#include <QTimer>
#include <QPixmap>
#include <QtNetwork>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    int m_nIndex;
    QLabel *m_pLoadingLabel;
    QTimer *m_pTimer;
    QNetworkAccessManager *manager;
private slots:
    void replyFinished(QNetworkReply *);

    void updatePixmap();
    void startAnimation();
    void stopAnimation();

};



#endif // MAINWINDOW_H

//.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    m_nIndex(1)
{
    ui->setupUi(this);
    this->setWindowTitle("Http下載器");

    //新建控件
    m_pLoadingLabel = new QLabel(this);
    m_pTimer = new QTimer(this);
    //m_pLoadingLabel->hide();  //一開始隱藏這個等待框

    // 設定超時時間100毫秒
    m_pTimer->setInterval(100);
    connect(m_pTimer, &QTimer::timeout, this, &MainWindow::updatePixmap);
    startAnimation();

    manager = new QNetworkAccessManager(this);  //新建一個QNetworkAccessManager對象
    connect(manager, SIGNAL(finished(QNetworkReply*)),
    this,SLOT(replyFinished(QNetworkReply*)));
    manager->get(QNetworkRequest(QUrl("http://www.qter.org")));

    //m_pLoadingLabel->exec();   //get請求結束後等待框消失


}


void MainWindow::updatePixmap()
{
    m_nIndex++;
    //循環
    if(m_nIndex > 8)
        m_nIndex = 1;
    QPixmap pixmap(tr(":/Loading/Images/Loading%1.jpg").arg(m_nIndex));
    m_pLoadingLabel -> setPixmap(pixmap);
}
void MainWindow::startAnimation()
{
    m_pTimer->start();
}

void MainWindow::stopAnimation()
{
    m_pTimer->stop();
}

void MainWindow::replyFinished(QNetworkReply *reply)
{

    QTextCodec *codec = QTextCodec::codecForName("utf8");
    //顯示中文
    QString all = codec->toUnicode(reply->readAll());
    ui->textBrowser->setText(all);
    m_pLoadingLabel->hide();
}
MainWindow::~MainWindow()
{
    delete ui;
}

4.顯示控件
(1)Label
(2)Text Browser
注意1:只能顯示本地文件,不能顯示網絡文件,也就是以 http開頭的這些網絡文件,網絡資源文件
注意2:支持html 子集,並非支持所有的HTML 標籤。
(3)Graphics View
(4)Calendar
(5)LCD Number
(6)Progress Bar
(7)Horizontal Line
(8)Vertical Line
(9)QWebView
webkit的缺點
1:體積比較大,Qt5WebKit.dll 發佈版本有30M,調式版本有94M
2:他採用第三方庫,基於Webkit並和Qt集成的第三方庫,很容易崩潰
3:某些功能用webkit無法實現,比如用鼠標拖動圖片調節大小。
//.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QTimer>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void timerEvent(QTimerEvent *);
private slots:


    void on_textBrowser_anchorClicked(const QUrl &arg1);
    void timeout();
private:
    Ui::MainWindow *ui;
    QGraphicsScene scene_;
    QTimer timer_;
    int h_, m_,s_;
    int index_;
    int timerId_;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qdebug.h>
#include <QGraphicsTextItem>
#include <QTime>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QStringList list;
    list << "C:/Users/Administrator/Desktop";

    ui->textBrowser->setSearchPaths(list);
    ui->textBrowser->setSource(QUrl("google.htm"));

    QGraphicsTextItem *item = new QGraphicsTextItem("Graphics View");
    scene_.addItem(item);
    ui->graphicsView->setScene(&scene_);

    h_ = m_ = s_ = 0;
    connect(&timer_, &QTimer::timeout, this, &MainWindow::timeout);

    timer_.setInterval(1000);
    timer_.start();

    s_ = QTime::currentTime().second();
    m_ = QTime::currentTime().minute();
    h_ = QTime::currentTime().hour();

    ui->lcdNumber->display(s_);
    ui->lcdNumber_2->display(m_);
    ui->lcdNumber_3->display(h_);

    index_ = 0;
    timerId_ = this->startTimer(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::timerEvent(QTimerEvent *)
{
    index_++;
    ui->progressBar->setValue(index_);

    **if (index_ == ui->progressBar->maximum())
    {
        this->killTimer(timerId_);
    }
}
void MainWindow::on_textBrowser_anchorClicked(const QUrl &arg1)
{
    qDebug() << arg1;
}
void MainWindow::timeout()
{
    s_++;
    if (s_ % 60 == 0)
    {
        m_ += 1;
        s_ = 0;
    }
    if (m_ % 60 == 0)
    {
        h_ += 1;
        m_ = 0;
    }
    if (h_ % 24 == 0)
    {
        h_ = 0;
    }
    ui->lcdNumber->display(s_);
    ui->lcdNumber_2->display(m_);
    ui->lcdNumber_3->display(h_);
}

5.佈局(學會了佈局的簡單使用)
(1)垂直佈局( vertically ),相關類: QVBoxLayout
(2)水平佈局( horizontally )相關類: QHBoxLayout
(3)網格佈局( grid)相關類: QGridLayout
(4)表格佈局( form)相關類: QFormLayout
(5)堆棧佈局( stack)相關類: QStackedLayout**
6.計算機網絡中的一些知識點:如http和https的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章