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