c++/qt通过QWebChannel与JS/html网页端交互通信
warning:
这篇文章距离上次修改已过195天,其中的内容可能已经有所变动。
#include <QWebChannel>
#include <QQmlApplicationEngine>
#include <QGuiApplication>
#include <QQmlContext>
// 假设有一个自定义的C++类需要与JavaScript交互
class MyType : public QObject {
Q_OBJECT
public:
explicit MyType(QObject *parent = nullptr) : QObject(parent) {}
// 需要暴露给JavaScript的函数
Q_INVOKABLE void myFunction(const QString &message) {
// 处理接收到的消息
}
// 需要暴露给JavaScript的属性
Q_PROPERTY(int myProperty READ myProperty WRITE setMyProperty NOTIFY myPropertyChanged)
public slots:
int myProperty() const {
// 返回属性值
return 0;
}
void setMyProperty(int value) {
// 设置属性值
}
signals:
void myPropertyChanged(int value);
};
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
// 创建QWebChannel并绑定到QML引擎
QWebChannel channel;
MyType myType;
channel.registerObject(QStringLiteral("myType"), &myType);
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty(QStringLiteral("webChannel"), &channel);
engine.load(QUrl(QStringLiteral("qrc:/index.html")));
return app.exec();
}
在这个例子中,我们定义了一个名为MyType
的C++类,它有一个可被JavaScript调用的函数myFunction
和一个可读写的属性myProperty
。我们通过QWebChannel
将这个类的实例注册到了QML引擎中,并且在HTML页面中通过webChannel
对象与之交互。这样就实现了C++和JavaScript的通信。
评论已关闭