界面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。