总结

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的区别

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