Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Qt WebEngine自动授予对麦克风和摄像头的访问权限_C++_Qt_Qt5_Webrtc_Qwebengineview - Fatal编程技术网

C++ 使用Qt WebEngine自动授予对麦克风和摄像头的访问权限

C++ 使用Qt WebEngine自动授予对麦克风和摄像头的访问权限,c++,qt,qt5,webrtc,qwebengineview,C++,Qt,Qt5,Webrtc,Qwebengineview,我正在用RPi和WebRTC构建一个家庭安全系统。我只需要一种方法来触发浏览器在给定的URL打开,并自动授予对麦克风和摄像头的访问权限。我曾希望将WebEngine库与PyQt一起使用,但PyQt for RPi不支持WebEngine。所以我现在正在尝试Qt本身。不幸的是我不熟悉C++,所以我在挣扎。 这个例子有我需要的90%。代码复制如下。我只需要调整它,以便在需要时允许访问麦克风和摄像头。我希望有人能帮我做这件事 #include <QApplication> #include

我正在用RPi和WebRTC构建一个家庭安全系统。我只需要一种方法来触发浏览器在给定的URL打开,并自动授予对麦克风和摄像头的访问权限。我曾希望将WebEngine库与PyQt一起使用,但PyQt for RPi不支持WebEngine。所以我现在正在尝试Qt本身。不幸的是我不熟悉C++,所以我在挣扎。 这个例子有我需要的90%。代码复制如下。我只需要调整它,以便在需要时允许访问麦克风和摄像头。我希望有人能帮我做这件事

#include <QApplication>
#include <QWebEngineView>

QUrl commandLineUrlArgument()
{
    const QStringList args = QCoreApplication::arguments();
    for (const QString &arg : args.mid(1)) {
        if (!arg.startsWith(QLatin1Char('-')))
            return QUrl::fromUserInput(arg);
    }
    return QUrl(QStringLiteral("https://www.qt.io"));
}


int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);
    QWebEngineView view;
    view.setUrl(commandLineUrlArgument());
    view.resize(1024, 750);
    view.show();

    return app.exec();
}
#包括
#包括
QUrl命令行URL参数()
{
常量QStringList args=QCoreApplication::arguments();
用于(常量字符串和参数:参数中间(1)){
如果(!arg.startsWith(QLatin1Char('-'))
返回QUrl::fromUserInput(arg);
}
返回QUrl(QStringLiteral(“https://www.qt.io"));
}
int main(int argc,char*argv[])
{
QCoreApplication::setAttribute(Qt::AA_enableHighdDiscaling);
QApplication应用程序(argc、argv);
QWebEngineView视图;
view.setUrl(commandLineUrlArgument());
视图。调整大小(1024750);
view.show();
返回app.exec();
}

我回答了这个问题,但对于PyQt5:,我只会将C++翻译成Python,基础是相同的

#include <QApplication>
#include <QUrl>
#include <QWebEngineView>

class WebEnginePage: public QWebEnginePage{
    Q_OBJECT
public:
    WebEnginePage(QObject *parent = Q_NULLPTR):QWebEnginePage(parent){
        connect(this, &WebEnginePage::featurePermissionRequested, this, &WebEnginePage::onFeaturePermissionRequested);
    }
private Q_SLOTS:
    void onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature){

        if(feature  == QWebEnginePage::MediaAudioCapture
                || feature == QWebEnginePage::MediaVideoCapture
                || feature == QWebEnginePage::MediaAudioVideoCapture)
            setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionGrantedByUser);
        else
            setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionDeniedByUser);
    }
};

QUrl commandLineUrlArgument()
{
    const QStringList args = QCoreApplication::arguments();
    for (const QString &arg : args.mid(1)) {
        if (!arg.startsWith(QLatin1Char('-')))
            return QUrl::fromUserInput(arg);
    }
    return QUrl(QStringLiteral("https://www.qt.io"));
}


int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);
    QWebEngineView view;
    view.setPage(new WebEnginePage);
    view.setUrl(commandLineUrlArgument());
    view.resize(1024, 750);
    view.show();

    return app.exec();
}

#include "main.moc"
#包括
#包括
#包括
类别WebEnginePage:公共QWebEnginePage{
Q_对象
公众:
WebEnginePage(QObject*parent=Q_NULLPTR):QWebEnginePage(parent){
连接(此,&WebEnginePage::featurePermissionRequested,此,&WebEnginePage::onFeaturePermissionRequested);
}
专用Q_插槽:
请求的FeaturePermissions无效(const QUrl&securityOrigin,QWebEnginePage::Feature功能){
如果(功能==QWebEnginePage::MediaAudioCapture
||feature==QWebEnginePage::MediaVideoCapture
||功能==QWebEnginePage::MediaAudioVideoCapture)
setFeaturePermission(securityOrigin、feature、QWebEnginePage::PermissionGrantedByUser);
其他的
setFeaturePermission(securityOrigin、feature、QWebEnginePage::PermissionDeniedByUser);
}
};
QUrl命令行URL参数()
{
常量QStringList args=QCoreApplication::arguments();
用于(常量字符串和参数:参数中间(1)){
如果(!arg.startsWith(QLatin1Char('-'))
返回QUrl::fromUserInput(arg);
}
返回QUrl(QStringLiteral(“https://www.qt.io"));
}
int main(int argc,char*argv[])
{
QCoreApplication::setAttribute(Qt::AA_enableHighdDiscaling);
QApplication应用程序(argc、argv);
QWebEngineView视图;
view.setPage(新的WebEnginePage);
view.setUrl(commandLineUrlArgument());
视图。调整大小(1024750);
view.show();
返回app.exec();
}
#包括“main.moc”

当创建信号和插槽时,Qt创建处理这些连接的moc文件,当您创建.ui时,这些文件是自动创建的,但在main.cpp的情况下,您必须手动包含它,这就是为什么我必须在示例中这样做的原因,查看http://doc.qt.io/qt-5/moc。html@LeeMelbourne如果我的答案对你有帮助,请把它标记为正确。非常感谢。当我按照发布的方式运行代码时,我得到“main.moc没有这样的文件或目录”。如果删除该行,则会得到“未定义的对vtable for webenginepage的引用”。你能帮我解决我可能做错的地方吗?@Qt Creator中的@leemberne转到
build
选项卡,然后按
runqmake
选项。太好了!效果很好。不幸的是,当我访问meet.jit.si或execute.in等网站时,它们仍然会提示使用cam&mic。但我认为这是来自他们的web应用层,而不是来自浏览器。我不打算在Pi上有一个UI,所以我需要解决这个问题。