界面与js(百度地图 API)交互--Qt 网络

    在做项目的时候,需要用到QWebView将百度地图进行显示,并且与界面进行交互。查资料,用到一个关键类QWebChannel。在学会后,发现这个类无比的神奇,Qt总是给人带来惊喜:简单的操作,就可实现交互。

    QWebChannel类,在我看来就是通道,界面和 js 在知道 “通道路口”后,就可以交流,js 就可以通过这个通道调用Qt 界面的方法。

一、Qt 界面创建类QWebChannel实例

    QWebChannel *channel = new QWebChannel(this);
    channel->registerObject(QStringLiteral("content"), &m_content);
    view->page()->setWebChannel(channel);

其中 m_content 是我自己创建的类 Document,用于 与js沟通的类。 槽   void receiveText(const QString &r_text);用于js 发送的信息。

#ifndef DOCUMENT_H
#define DOCUMENT_H

#include <QObject>
#include <QString>
#include "ui_mainwindow.h"
namespace Ui {
class MainWindow;
}

class Document: public QObject
{
    Q_OBJECT
public:
    explicit Document(QObject *parent = nullptr) : QObject(parent) {}

    void setUi(Ui::MainWindow *ui);

public slots:
    void receiveText(const QString &r_text);


private:
    QString recieve_text;
    Ui::MainWindow *mainUi;
};

#endif // DOCUMENT_H

二、js 的操作

js 要想调用QWebChannel 还需要一个文件 qwebchannel.js 。在 头里要引用源(这个说法不知道对不对,没怎么接触过js/html)。

<script src="./qwebchannel.js"></script>
下面就是调用类QWebChannel ,可以看到这行代码    varcontent=channel.objects.content;与Qt里面的
egisterObject(QStringLiteral("content"), &m_content)
是对应的。下面一个按键来作为调用Qt 方法 receiveText( const QString &r_text )的条件。当然这个条件是自己设定的,想什么时候调用,就什么时候调用。

 
new QWebChannel(qt.webChannelTransport,function(channel)
{
 //获取Qt交互对象
  var content = channel.objects.content; 
                document.getElementById("send").onclick = function() {
                    var input = document.getElementById("input");
                    var text = input.value;
                    if (!text) {
                        return;
                    }
                    input.value = "";
                    content.receiveText(text);
});

三、总结

没什么好说的了,对了,Qt 我用的是5.6.0版本的。


Qt是一款跨平台的C++图形用户界面应用程序开发框架,能够轻松开发高质量的跨平台应用程序。而百度地图是目前国内最流行的Web地图服务,为开发者提供了非常便捷的地图展示、位置检索、路线规划等能力。在Qt中使用百度地图,并能够与js交互,可以大大拓宽了应用的功能。 我们可以使用Qt Quick的WebView来实现百度地图的加载,同时也能够在WebView中嵌入JavaScript代码,实现和地图的互动。在Qt Quick中,可以使用QtWebView模块的WebEngineView或WebEngineViewExperimental类型的对象加载Web页面,并进行动态链接库的调用,从而实现与JavaScript的交互。 具体步骤如下: 1. 首先,在Qt Creator中创建一个Qt Quick项目,并在QML文件中加入一个WebView组件,用于加载百度地图。 2. 在C++代码中调用WebEngineView或WebEngineViewExperimental类型的对象,通过setUrl()方法加载百度地图的URL。 3. 通过WebView对象的runJavaScript()方法,在QML文件中嵌入JavaScript代码,并获取、设置百度地图中的特定属性或事件。 例如,我们可以在JavaScript中调用百度地图的JavaScript API,获取当前地图的中心点、缩放级别、添加标记、绘制图形等动作,从而实现和地图的交互。 总之,Qt的WebEngineView提供了非常便捷的方法来在Qt应用中加载Web页面,并与JavaScript进行交互,因此,我们可以使用它轻松地实现与百度地图交互,为我们的应用程序增加更多的功能和乐趣。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值