利用QWebview实现简单的浏览器,支持后退前进刷新,支持打开指定网页,支持点击网页内的链接

界面ui如下在这里插入图片描述头文件代码:

#include <QWidget>
#include "ui_mywebwidget.h"

class MyWebWidget : public QWidget
{
	Q_OBJECT

public:
	MyWebWidget(QWidget *parent = Q_NULLPTR);
	~MyWebWidget();
public slots:
	void slotOpenBackUrl();
	void slotOpenForwardUrl();
	void slotOpenNewUrl();
	void slotRefreshUrl();
	void slotSetUrl(QUrl url);
	void slotSetTitle(QString title);
	void slotOpenWebLink(QUrl url);
private:
	void OpenNewUrl(const QString &str_url);//新增一个
	void OpenUrl(int iIndex);//打开已有的
private:
	void OpenUrl(const QString &str_url);//基础函数
private:
	Ui::MyWebWidget ui_;
	QStringList url_list_;//网址列表
	int iCurIndex_;//当前网址的下标
};

cpp代码:


#include "mywebwidget.h"

MyWebWidget::MyWebWidget(QWidget *parent)
	: QWidget(parent)
{
	ui_.setupUi(this);
	//
	connect(ui_.pushButtonBack, SIGNAL(clicked()), this, SLOT(slotOpenBackUrl()));
	connect(ui_.pushButtonForward, SIGNAL(clicked()), this, SLOT(slotOpenForwardUrl()));
	connect(ui_.pushButtonRefresh, SIGNAL(clicked()), this, SLOT(slotRefreshUrl()));
	connect(ui_.pushButtonOpen, SIGNAL(clicked()), this, SLOT(slotOpenNewUrl()));
	connect(ui_.lineEdit, SIGNAL(returnPressed()), this, SLOT(slotOpenNewUrl()));//输入新地址后回车
	connect(ui_.webView, SIGNAL(urlChanged(QUrl)), this, SLOT(slotSetUrl(QUrl)));//地址改变
	connect(ui_.webView, SIGNAL(titleChanged(QString)), this, SLOT(slotSetTitle(QString)));
	connect(ui_.webView, SIGNAL(linkClicked(QUrl)), this, SLOT(slotOpenWebLink(QUrl)));//页面点击链接
	//
	ui_.lineEdit->setText("https://www.163.com");
	slotOpenNewUrl();
}

MyWebWidget::~MyWebWidget()
{
}

void MyWebWidget::slotOpenNewUrl()
{
	const QString str_url = ui_.lineEdit->text();
	OpenNewUrl(str_url);
}

void MyWebWidget::OpenNewUrl(const QString &str_url)
{
	if (iCurIndex_ >= 0 && iCurIndex_ < url_list_.size())
	{
		if (url_list_[iCurIndex_] == str_url)//重复地址
		{
			slotRefreshUrl();
			return;
		}
	}
	url_list_.push_back(str_url);
	iCurIndex_ = url_list_.size() - 1;
	OpenUrl(iCurIndex_);
}

void MyWebWidget::slotOpenBackUrl()
{
	if (iCurIndex_ > 0)
	{
		--iCurIndex_;
	}
	OpenUrl(iCurIndex_);
}

void MyWebWidget::slotOpenForwardUrl()
{
	if ((iCurIndex_ + 1) < url_list_.size())
	{
		++iCurIndex_;
	}
	OpenUrl(iCurIndex_);
}

void MyWebWidget::slotRefreshUrl()
{
	OpenUrl(iCurIndex_);
}

void MyWebWidget::OpenUrl(int iIndex)
{
	if (iIndex >= 0 && iIndex < url_list_.size())
	{
	}
	else
	{
		iIndex = 0;
		if (url_list_.size() == 0)
		{
			url_list_.push_back("https://www.163.com");
			iCurIndex_ = 0;
		}
	}
	OpenUrl(url_list_[iIndex]);
}

void MyWebWidget::OpenUrl(const QString &str_url)
{
	ui_.lineEdit->setText(str_url);
	ui_.webView->load(QUrl(ui_.lineEdit->text()));
	ui_.webView->show();
	ui_.webView->showMaximized();
	ui_.webView->page()->setLinkDelegationPolicy(QWebPage::DelegateExternalLinks);
}

void MyWebWidget::slotSetUrl(QUrl url)
{
	ui_.lineEdit->setText(url.toString());
}

void MyWebWidget::slotSetTitle(QString title)
{
	this->setWindowTitle(title);
}

void MyWebWidget::slotOpenWebLink(QUrl url)
{
	OpenNewUrl(url.toString());
}

使用的时候,将widget提升为此MyWebWidget。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值