gpt4 book ai didi

c++ - QWebEnginePage中的setFeaturePermission成员函数是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:36:15 31 4
gpt4 key购买 nike

我正在使用 Qt5.5.0 并想知道 QWebEnginePage::setFeaturePermission 是怎么做到的工作?

在这种情况下,我想授予加载页面媒体音频视频捕获权限,但它不起作用:

#include <QtWebEngineWidgets>

int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWebEngineView *view = new QWebEngineView();
view->page()->setUrl(QUrl("http://127.0.0.1:3333/index.html"));
view->page()->setFeaturePermission(view->page()->url(), QWebEnginePage::MediaAudioVideoCapture, QWebEnginePage::PermissionGrantedByUser);
view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
view->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
view->show();
return app.exec();
}

我的代码有什么问题?

最佳答案

根据 QWebEnginePage::setFeaturePermission 的官方 Qt 文档:

Note: Call this method on featurePermissionRequested() signal, as it is meant to serve pending feature requests only. Setting feature permissions ahead of a request has no effect.

因此,它仅在请求功能时有效,例如这里是基本 Qt 小部件应用程序的一部分,其中 QWebEngineView在主窗口构造函数中创建,信号 featurePermissionRequested页面的 ( QWebEnginePage) 连接到适当的插槽:

// slot to handle permission request
void MainWindow::featurePermissionRequested(const QUrl & securityOrigin,
QWebEnginePage::Feature feature)
{
// print origin and feature
qDebug() << securityOrigin << feature;

// grant permission
view->page()->setFeaturePermission(view->page()->url(),
QWebEnginePage::MediaAudioCapture, QWebEnginePage::PermissionGrantedByUser);
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

// store web view pointer as class the member QWebEngineView *view;
view = new QWebEngineView();

// add view widget to 'verticalLayout' added to UI in UI Design
ui->verticalLayout->addWidget(view);

// set view page
view->page()->setUrl(QUrl("https://some_audio_capturing_site"));

// connect page signal with 'this' object slot
connect(view->page(),
SIGNAL(featurePermissionRequested(const QUrl&, QWebEnginePage::Feature)),
SLOT(featurePermissionRequested(const QUrl&, QWebEnginePage::Feature)));
}

我在一个音频捕获网站上测试了这个例子。当该站点请求麦克风访问权限时,可以通过调试打印看到插槽已被触发。它打印站点 URL 和 2对应QWebEnginePage::MediaAudioCapture .如果未授予许可,则不会发生任何事情。然而,在调用 setFeaturePermission 之后在那个插槽中,一切都按预期工作。该网站能够捕获音频。

关于c++ - QWebEnginePage中的setFeaturePermission成员函数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023537/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com