一般在Dialog中使用QWebView会直接拖一个QWebView组件、 但是不能点击链接,然后会采用
connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(openUrl(QUrl)));
void web::openUrl(QUrl url){
ui->webView->load(url);
来处理网页中加载的链接、但是这样不可以不能确定那个连接是在新窗口中打开、那个是在原来的窗口中打开。
如果是新弹出窗口的话、会响应createWindow(); 可以参考。
在QWebPage中有这么一个函数、重写 acceptNavigationRequest ( QWebFrame * frame, const QNetworkRequest & request, NavigationType type )函数
代码如下(注释写的比较清楚、如有疑问可以留言):
webPage.h
#ifndef WEBPAGE_H
#define WEBPAGE_H
#include <QWebPage>
#include <QNetworkRequest>
class webPage : public QWebPage
Q_OBJECT
public:
explicit webPage(QObject *parent = 0);
signals:
void loadLink(const QUrl & url);
void openLink(const QUrl & url);
protected:
bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);//重写
#endif // WEBPAGE_H
webPage.cpp
#include "webPage.h"
webPage::webPage(QObject *parent) :
QWebPage(parent)
bool webPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type){
if(type==0){//如果是用户点击
if(frame!=mainFrame()){ //如果不是在本窗口的连接
emit openLink(request.url());//发送打开新连接信号
}else{
emit loadLink(request.url());//发送点击连接信号
return QWebPage::acceptNavigationRequest(frame, request, type);
然后在你使用QWebView的地方设置QWebView的page就可以了
webPage* page=new webPage(this);
w=new QWebView(this);
w->setPage(page); w->load(QUrl("HTTP://WWW.BAIDU.COM"));
connect(page,SIGNAL(loadLink(QUrl)),this,SLOT(linkUrl(QUrl)));
connect(page,SIGNAL(openLink(QUrl)),this,SLOT(openUrl(QUrl))); }
void web::linkUrl(QUrl url){
//处理不打开新窗口的连接 }
void web::openUrl(QUrl url){
//处理新窗口的连接}
项目下载地址。
http://download.csdn.net/detail/silencesu/4739337 注:原创文章、转载请注明出处。
一般在Dialog中使用QWebView会直接拖一个QWebView组件、 但是不能点击链接,然后会采用 connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(openUrl(QUrl)));void web::openUrl(QUrl url){ ui->webView->load(url);} 来处理网页中加载的链接、
先看文档:
bool QWebPage::acceptNavigationRequest ( QWebFrame * frame, constQNetworkRequest & request, NavigationType type ) [virtualprotected]
This function is called whenever WebKit requeststo navi
PyQt5的QWebEngineView加载的页面,点击事件,有的有效,有的无效,就算是重写了WebEnginePage的acceptNavigationRequest也还是一样。参考了一篇C++的代码,终于解决。
WebEngineView的createWindow重写有技巧,先贴出代码,以后再慢慢看。
class WebEnginePage(QWebEnginePage):
connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(openUrl(QUrl)));
void web::openUrl(QUrl url){
ui->webView->load(url);
来处理网...
1. 前言
最近,C++和WEB本地混合应用开发模式逐渐流行起来,个人也认为标记语言描述的界面是界面开发的一个发展趋势。WPF、Java FX,当然也少不了Html。基于Html的界面在开发效率,可移植性上都十分有优势,所以也被很多程序采用
随着HTML5技术风生水起,Qt开发团队用近一年的时间开发了一个全新的基于Chromium的浏览器引擎Qt WebEngine,以支持面向未来的Hybr
最常用的第三方库是 PyQt 和 wxPython。这些库都提供了丰富的用户界面工具,可以轻松地嵌入网页。
例如,使用 PyQt,可以使用 QWebView 控件嵌入网页。首先,需要安装 PyQt 库:
pip install PyQt5
然后,可以使用以下代码来嵌入网页:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from PyQt5.QtWebEngineWidgets import QWebEngineView
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 QWebEngineView 对象
self.webview = QWebEngineView()
# 加载页面
self.webview.load(QUrl("http://www.example.com"))
# 创建布局并添加 QWebEngineView 对象
layout = QVBoxLayout()
layout.addWidget(self.webview)
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这样就可以在 Python 程序中嵌入一个网页了。
注意:使用 PyQt 和 wxPython 需要了解 GUI 编程基础知识。如果不了解,可以先学习 GUI 编程。
// WRONG
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db" is now a dangling invalid database connection,
// "query" contains an invalid result set
The correct way to do it:
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correct
也就是说,你在removeDatabase之前,要确保query和database都已经被删除掉了。
QWebView 中点击链接的处理
mrliangzhu:
Qt数据库QSqlDatabasePrivate警告处理
流浪的鹅卵石:
QWebView 中点击链接的处理
yulinxx: