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的區別