gpt4 book ai didi

c++ - 在QtWebEngine中捕获JavaScript事件

转载 作者:行者123 更新时间:2023-12-02 10:16:31 24 4
gpt4 key购买 nike

我必须使用JavaScript捕获从网页调度的事件,然后将其连接到MainWindow类中的插槽。逼迫的:

QWebEngineView *view;
view->load(QUrl("https://test.com/"));

connect(view->my_element, &DOMElement::hover, this, &MainWindow::elementHovered);


在C++中,最算法的方法是什么?

最佳答案

如果要跟踪DOM某些元素的事件并将其通知给C++元素,则必须使用Qt WebChannel:

#include <QtWebEngineWidgets>

static QString getSourceCode(const QString & filename){
QFile file(filename);
if(!file.open(QIODevice::ReadOnly))
return {};
return file.readAll();
}

class HoverHelper: public QObject{
Q_OBJECT
public:
using QObject::QObject;
Q_SIGNALS:
void hovered();
public Q_SLOTS:
void onHovered(){ Q_EMIT hovered(); }
};

#include "main.moc"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

HoverHelper hover_helper;

QWebChannel channel;
channel.registerObject("qt_helper", &hover_helper);

QWebEngineView view;
view.page()->setWebChannel(&channel);
QObject::connect(&view, &QWebEngineView::loadFinished, [&view](){
QStringList source_codes;
source_codes << getSourceCode(QStringLiteral(":/qtwebchannel/qwebchannel.js"));
source_codes << R"(
new QWebChannel(qt.webChannelTransport, function (channel) {
var e = document.getElementById("LearnMore1")
e.addEventListener("mouseover", function(){
channel.objects.qt_helper.onHovered()
});
});
)";
view.page()->runJavaScript(source_codes.join("\n"));
qDebug() << "loadFinished";
});

view.resize(640, 480);
view.load(QUrl("https://test.com/"));
view.show();

QObject::connect(&hover_helper, &HoverHelper::hovered, [](){
qDebug() << "hovered" << QTime::currentTime();
});
return a.exec();
}

关于c++ - 在QtWebEngine中捕获JavaScript事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61764733/

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