我正在尝试使用 QML 和 WebEngineView 组件为 Ubuntu 14.04 的桌面制作一个简单的网络浏览器。该应用程序将在带有触摸板的设备上运行,因此最好使 WebEngineView 中显示的内容可滑动。
我试图这样做,但它不起作用:
...
WebEngineView {
id: webView
url: "http://google.com"
width: parent.width
height: winternet.height-navigationBar.height-iStatusBar.height-iBackButton.height
anchors.top: navigationBar.bottom
MouseArea {
anchors.fill: parent
drag.target: parent.data
}
onLinkHovered: {
webView.url = hoveredUrl
}
}
...
Run Code Online (Sandbox Code Playgroud)
如果您对此有任何想法或经验,请提供帮助!
我正在尝试将使用 QtWebKit 呈现 Web 内容的应用程序移植到使用 QtWebEngine 的应用程序。
我在架构上可以更改的内容有限,因此我必须坚持当前渲染页面的方法,捕获到内存缓冲区,然后将其移动到另一个进程,其中缓冲区用作 OpenGL 中的纹理。
我已经尝试通过用 WebEngine 替换 WebKit 来移植代码(从广义上讲),但是 API 是不同的。
谁能告诉我这是否可能?如果是这样,请为我指出正确的方向,以说明如何将所有内容连接起来。
我看过关于QWebChannel的Qt示例.
但它是一个C/S应用程序.顺便说一句,它在我的电脑上不起作用(OS X 10.10.5,Qt5.5).
我的所有HTML内容都来自本地磁盘.我不认为它需要套接字的东西.
new QWebChannel(navigator.qtWebChannelTransport, function(channel) {
// all published objects are available in channel.objects under
// the identifier set in their attached WebChannel.id property
var foo = channel.objects.foo;
// access a property
alert(foo.hello);
// connect to a signal
foo.someSignal.connect(function(message) {
alert("Got signal: " + message);
});
// invoke a method, and receive the return value asynchronously
foo.someMethod("bar", function(ret) {
alert("Got return value: " + ret);
});
});
Run Code Online (Sandbox Code Playgroud)
没有
navigator.qtWebChannelTransport
这样的事情,JS停在那里.
我应该用第一个参数填写什么?
我正在将我的应用程序从 WebKit 移植到 WebEngine(似乎它更适合呈现 angular-basad html)。我遇到了无法启用 QtWebEngine 加载本地 iframe 的问题,尽管我已经设置了我发现的所有可能的设置:
mainwindow.cpp 中的代码
view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
view->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
view->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
view->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
view->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
Run Code Online (Sandbox Code Playgroud)
最简单的例子是采用基于 WebEngine 的 FancyBrowser (\Examples\Qt-5.4\webenginewidgets\fancybrowser) 并尝试在其中加载本地 html 文件,如下所示:
索引.html:
<html>
<head>
<title>Hi there</title>
</head>
<body>
This is a page
a simple page
<iframe id="some_idrame" width="0" height="0" style="border: none" src="some_iframe.html" name="target" sandbox="allow-scripts"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
some_iframe.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>La-la-la</title>
</head>
<body>
Lalala
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果您将 env var QTWEBENGINE_REMOTE_DEBUGGING 设置为某个端口,那么您可以打开 127.0.0.1:port 并在控制台中看到此错误:
"Not allowed …Run Code Online (Sandbox Code Playgroud) 我安装了最新版本的 Qt(在 Webkit 上,Qt5.2 有 WTFcrash)。我尝试在页面加载时获取我网站的内容(确实如此):
QString sHtml;
view.page()->toHtml([&](const QString& result){sHtml = result;qDebug() << result;});
Run Code Online (Sandbox Code Playgroud)
但是sHtml是空的,并且没有调用调试。我究竟做错了什么?
我正在将我的代码从 Qt 5.5 升级到 Qt 5.6,但我没有找到移植以下代码的方法:
QWebEngineView *qwebview = new QWebEngineView(this);
qwebview->settings()->setUserStyleSheetUrl(QUrl("qrc:/about.css"));
qwebview->setHtml(fileContentStr);
Run Code Online (Sandbox Code Playgroud)
使用新的 Qt Web 引擎插入用户 CSS 的最佳方法是什么?
有没有办法使用QtWebEngine将HTML/SVG渲染到打印机,PDF和光栅图像?
我们想要从WebKit切换到WebEngine,因此使用WebKit的QWebView不再是一个选项.
我有一个使用 OAuth 2.0 授权的应用程序(http://vk.com的音频播放器)。我所做的是实现 QtWebEngineView 对象并用它来打开授权页面。基本上,看起来目前我正在使用相当大的类来完成这么小的工作。不管怎样,我需要对我的应用程序 \xe2\x80\x94 进行静态构建,不幸的是,从我的研究中我发现人们说由于某些原因不可能静态构建依赖于 QtWebEngine 的应用程序。
\n\n这是真的?如果是这样,是否有任何替代方案 \xe2\x80\x94 也许是为 OAuth 2.0 身份验证制作的一些类?
\n\n任何帮助将非常感激!
\n我正在使用 QWebEngine 在 Python PyQt5 中开发一个 Web 浏览器。一切工作正常,但是当有人单击空白目标链接时,它显示为空白。我想在同一窗口中打开所有类型的链接。
如果我们右键单击并“关注链接”,那么它可以工作,但是当我们简单地单击该链接时,它就不起作用。
_blank 目标链接也应该在同一窗口中打开,而不是在 newtab 中打开
<a href='https://google.com' target='_blank'>test</a>
Run Code Online (Sandbox Code Playgroud)
这是我的代码
from PyQt5.QtWebEngineWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
class MainWindow(QMainWindow):
def createWindow(self, wintype):
return self
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.browser = QWebEngineView()
self.browser.setUrl(QUrl("http://androidd.pw/Login/"))
QWebEnginePage.JavascriptCanOpenWindows:True
self.browser.geolocation:True
self.browser.autoGrantPermissions:True
self.browser.urlChanged.connect(self.update_urlbar)
self.browser.urlChanged.connect(self.page_loading)
self.browser.loadFinished.connect(self.update_title)
self.setCentralWidget(self.browser)
self.status = QStatusBar()
self.setStatusBar(self.status)
#self.browser.HighlightAllOccurrences('hello world')
self.setCentralWidget(self.browser)
def update_urlbar(self, q):
###################################################################################
url = q.host()
#http://ipackersmovers.com/API/url/general?url=http://www.firsttecnology.us
with urllib.request.urlopen("http://androidd.pw/API/url/general?url="+url) as pyxis_url:pyxis = pyxis_url.read()
with urllib.request.urlopen("http://androidd.pw/API/url/ads?url="+url) as dom_url:ad = dom_url.read() …Run Code Online (Sandbox Code Playgroud) 我正在尝试解决这个错误:
必须在创建 QCoreApplication 实例之前导入 QtWebEngineWidgets。
这是不言自明的,但我试图制作一个在 iPython 中使用的 GUI,它可以在创建 QApplication 实例后导入。
如何解决此错误并创建一个 PyQt5 GUI,该 GUI 可以显示 HTML 页面,并且即使在用户使用 QApplication 实例(例如通过 matplotlib)后也能够导入?
我尝试了这个但仍然得到相同的错误:
from PyQt5 import QtWidgets
import seaborn as sns
sns.boxplot([1],[1])
QtWidgets.QApplication.instance().quit()
from PyQt5 import QtWidgets, QtWebEngineWidgets
Run Code Online (Sandbox Code Playgroud)