标签: qtwebengine

QWebEngine和QWebChannel:页面重新加载后传输对象`qt.webChannelTransport`消失了

我在我的应用程序之间创建了一个Web通道WebEngine,以便QObject在JavaScript中暴露在Web端,但是在页面重新加载后或者如果我单击链接到另一个页面时,通道会丢失.

我想我需要在页面重新加载时重新创建频道,但我没有设法做到这一点.我尝试在页面加载,进度和完成的插槽上执行此操作但只得到了js: Uncaught ReferenceError: qt is not defined.

<!-- language: lang-cpp -->
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->webEngineWidget->load(QUrl("qrc:/index.html"));
    page = ui->webEngineWidget->page();

    channel = new QWebChannel;
    channel->registerObject("external", &exposedObject);
    page->setWebChannel(channel);

    connect(page, &QWebEnginePage::loadStarted, this, &MainWindow::onPageLoadStarted);
    connect(page, &QWebEnginePage::loadProgress, this, &MainWindow::onPageLoadProgress);
    connect(page, &QWebEnginePage::loadFinished, this, &MainWindow::onPageLoadFinished);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onPageLoadStarted()
{
    qDebug() << "Loading started";
}

void MainWindow::onPageLoadProgress(int progress)
{
    qDebug() << "Loading in progress: " << progress;
}

void MainWindow::onPageLoadFinished()
{
    qDebug() …
Run Code Online (Sandbox Code Playgroud)

javascript c++ sockets qt qtwebengine

2
推荐指数
1
解决办法
2864
查看次数

使用QWebEngineView捕获服务器响应

我正在尝试在Qt中创建一个Dialog加载一个URL(我不想向最终用户公开,因此是一个Dialog).用户在页面上输入凭据后,服务器将返回我想要捕获的重定向URL.我怎样才能做到这一点?

QtWebkit使这很容易,因为QWebView有一个QNetworkAccessManager对象.但是使用QtWebEngine,QWebEngineView类没有此功能.前者还允许通过使用QNetworkRequest类为任何请求设置HTTP标头,然后在QWebView中加载具有这些特定请求的请求.如何使用QWebEngineView执行此操作?

qt qtwebkit qwebview qtwebengine

2
推荐指数
1
解决办法
2511
查看次数

qt webengine将javascript输出重定向到GUI

我有一个在小部件中查看页面的应用程序,QWebEngineView如何将我的 javascript 控制台日志重定向到我的 GUI?它当前显示在我的调试输出中。

javascript qt qt5 qtwebengine

2
推荐指数
1
解决办法
2557
查看次数

Qt WebEngine似乎已初始化

当我运行Qt应用程序时,我收到消息

Qt WebEngine似乎是从插件初始化的。在构造QGuiApplication之前,请使用QCoreApplication :: setAttribute设置Qt :: AA_ShareOpenGLContexts。

无论将其转储到终端上,该应用程序都可以正常运行。我似乎无法找到根本原因,也无法真正理解此消息试图告诉我的内容。此消息是什么意思,我该如何解决?

python qtwebengine pyside2

2
推荐指数
1
解决办法
789
查看次数

QWebEngineView update with pdf path

我正在QtWebEngineWidgets展示一些 pdf 文件。我想更改 pdf 并强制QtWebEngineView自动动态显示。我遇到的问题是QtWebEngineWidgetspdf 文件路径更改时无法更新、无法显示。

class PdfReport(QtWebEngineWidgets.QWebEngineView):
    PDFJS = 'file:///pdfjs/web/viewer.html'
    def __init__(self, parent=None):
        super(PdfReport, self).__init__(parent)
        self.PDF = 'file:///Technicalreport/file0.pdf'
        self.load(QtCore.QUrl.fromUserInput('%s?file=%s' % (PDFJS, self.PDF))) 

    @QtCore.pyqtSlot(int)    
    def index_load(self, _index):
        self._index = _index
        self.PDF = pdfpath(self._index)
Run Code Online (Sandbox Code Playgroud)

外部函数:

def pdfpath(index):
    if index == -1:
        PDF = 'file:///Technicalreport/file0.pdf'
    else:
        PDF = 'file:///Technicalreport/file%d.pdf' %index
    return PDF
Run Code Online (Sandbox Code Playgroud)

尝试测试函数并按预期返回:

for i in range(3):
    print(pdfpath(i), type(pdfpath(i)))

file:///Technicalreport/file0.pdf <class 'str'>
file:///Technicalreport/file1.pdf <class 'str'>
file:///Technicalreport/file2.pdf <class 'str'>
Run Code Online (Sandbox Code Playgroud)

是的 pdf 文件'file0''file1'并且'file2' …

python pyqt python-3.x pyqt5 qtwebengine

2
推荐指数
1
解决办法
2562
查看次数

使用 Qt WebEngineView 在特定页面打开 PDF

我想在我的 Qt 应用程序中创建一个简单的 PDF 查看器。一切正常,接受通过 URL 在特定页面打开 PDF。例如:

url = "file:///D://Repo//PdfViewer//PdfViewer//test.pdf";
Run Code Online (Sandbox Code Playgroud)

有效,但是

url = "file:///D://Repo//PdfViewer//PdfViewer//test.pdf#page=9";
Run Code Online (Sandbox Code Playgroud)

剂量。我在某处读到,chrome 不再正式支持 #page=x,但我找不到更多信息如何解决这个问题。我在 Qt 的 Nano-Browser 示例中遇到了与此 url 相同的问题。

PdfViewer::PdfViewer(const QString &pdf_path, QWidget *parent)
: QWidget(parent), m_View(new QWebEngineView(this)), m_ExitButton(new QPushButton())
{
  QUrl url = QUrl::fromLocalFile(pdf_path);

  m_View->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true);
  m_View->settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
  m_View->settings()->setAttribute(QWebEngineSettings::PdfViewerEnabled, true);
  m_View->load(url);

  m_ExitButton->setIcon(QIcon("Ok.png"));

  QVBoxLayout *layout = new QVBoxLayout();
  layout->addWidget(m_View);
  layout->addWidget(m_ExitButton);
  this->setLayout(layout);

  connect(m_ExitButton, &QPushButton::clicked, this, &PdfViewer::close);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Qt 5.13。

c++ pdf qt qtwebengine

2
推荐指数
1
解决办法
3053
查看次数

Qt Webengine不加载openstreetmap图块

我写了一个这样的python测试程序来显示openstreetmap:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
import sys

def mainPyQt5():
    url = 'file:///./index.html'
    app = QApplication(sys.argv)
    browser = QWebEngineView()
    browser.load(QUrl(url))
    browser.show()
    sys.exit(app.exec_()) 
mainPyQt5()
Run Code Online (Sandbox Code Playgroud)

QWebEngineView 获取的 index.html 只需调用 openstreetmap:

<title>OSM and Leaflet</title>
<link rel = "stylesheet" href = "http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css"/>
<div id = "map" style = "width: 900px; height: 580px"></div><script src =  "http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<script>
         // Creating map options
         var mapOptions = {
            center: [45.641174, 9.114828],
            zoom: 10
         }
         
         // Creating a map object
         var map …
Run Code Online (Sandbox Code Playgroud)

python openstreetmap pyqt5 qtwebengine

2
推荐指数
1
解决办法
458
查看次数

Qt函数runJavaScript()不执行JavaScript代码

我正在尝试在Qt中实现网页的显示。我选择使用Qt WebEngine来完成任务。这是我所做的:

  • 编写了一个包含空白表格的示例网页。
  • 仅使用API​​编写JS文件即可在表单内创建单选按钮。

在我的代码中,它看起来像这样:

View = new QWebEngineView(this);
// read the js file using qfile
file.open("path to jsFile");
myJsApi = file.Readall();
View->page()->runjavascript (myjsapi);
View->page()->runjavascript ("createRadioButton(\"button1\");");
Run Code Online (Sandbox Code Playgroud)

我发现该runJavaScript()功能对网页没有影响。我可以在输出窗口中看到该网页,但是我期望的单选按钮不存在。我究竟做错了什么?

html javascript qt qtwebengine

1
推荐指数
1
解决办法
2042
查看次数

如何使用QWebEngineView导入本地JavaScript文件?

我正在尝试构建一个简单的示例,在 PyQt 窗口中显示 HTML(包括 JavaScript 代码)

python
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl,QDir
from PyQt5.QtWebEngineWidgets import QWebEngineView

class Example(QWidget):

    def __init__(self):
        super().__init__()
        vbox = QVBoxLayout(self)
        self.webEngineView = QWebEngineView()

        self.webEngineView.setHtml("""
            <!DOCTYPE html>
            <html lang="en">
              <head>
                <meta charset="utf-8">
                <script src="file:///home/path/to/jquery-3.6.0.min.js"></script>
              </head>
              <body>
                <!-- page content -->
                <span id="aaa">toto</span>
                <script>
                    $("#aaa").hide()
                </script>
              </body>
            </html>""")

        vbox.addWidget(self.webEngineView)
        self.setLayout(vbox)
        self.show()

sys.argv.append("--disable-web-security")
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

但显然,位于我的 Python 脚本旁边的 jQuery JavaScript …

python pyqt pyqt5 qtwebengine qwebengineview

0
推荐指数
1
解决办法
967
查看次数