首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtWebView -- C++ --如何获取从linkClicked事件返回的javascript字符串

QtWebView -- C++ --如何获取从linkClicked事件返回的javascript字符串
EN

Stack Overflow用户
提问于 2013-01-03 02:19:24
回答 1查看 996关注 0票数 0

对于我的问题,我一直找不到一个明确的答案。

我目前有一个QWebView控件加载我的硬盘驱动器上的html文件,它实现了一个带有javascript操作的矢量地图。html文件加载一个jvectormap US States Map。任何状态上的单击操作都会触发绑定到showCities函数的onRegionClick操作,事件和代码参数由jquery-jvectormap.js文件中实现的onRegionClick方法处理。html文件如下:

代码语言:javascript
复制
<!DOCTYPE html>

<html lang="en">
<head>

    <link rel="stylesheet" href="styles/style2.css" type="text/css"/>


    <link rel="stylesheet" media="all" href="styles/jquery-jvectormap.css"/>
    <script src="js/jquery.tools.min.js"></script>
    <script src="js/jquery-jvectormap.js"></script>
    <script src="js/jquery-jvectormap-us-en.js"></script>
    <script>
        $(function() {
            $('.map').vectorMap({
                map: 'us_en',
                color: 'green',
                hoverColor: 'blue',
                onRegionClick: showCities
            });
        });
        function showCities(event, code) {
            return code;

        }


    </script>
</head>


<body>



    <div id="front">


        <div class="map"></div>

        </div>


</body>
</html>

和Qt中的mainwindow.h头文件信息:

代码语言:javascript
复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QUrl>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_webView_linkClicked(const QUrl &arg1);


private:
    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

然后是MainWindow.cpp文件:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QtGui>
#include <QtCore>
#include <QDebug>
#include <QtWebKit>
#include <QWebSettings>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
   ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
   connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(on_webView_linkClicked(QUrl)));

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_webView_linkClicked(const QUrl &arg1)
{
    QMessageBox::information(this,"Title","Test");

}

当我单击任何特定的区域区域时,不会触发/触发on_webView_linkClicked函数。任何单击的区域都被设计为返回一个字符串。当我在http://www.google.com这样的网页上尝试时,on_WebView_linkClicked函数中的QMessageBox实际上触发/激发了一个显示QMessageBox的事件。

这里的目标是让函数showCities中的html文件中返回的javascript字符串显示在on_webView_linkClicked事件中。显然,linkClicked操作没有将javascript返回识别为链接,因此在使用jquery向量图时它保持沉默。

我已经到处找过了,我能得到的唯一答案是,如果vectormap中的那些区域有url链接,它可能会起作用,但我在这些区域中嵌入伪链接不会导致触发on_webView_linkClicked事件。

感谢您的帮助:)

EN

回答 1

Stack Overflow用户

发布于 2014-02-24 17:29:14

IMHO,下面的解决方案更简单:

mainwindow.h

代码语言:javascript
复制
protected slots:
    void showCities();

mainwindow.cpp

代码语言:javascript
复制
//in constructor
//make sure that page already loaded
webView->page()->mainFrame()->addToJavaScriptWindowObject("qt", this);


// implement function
void MainWindow::showCities()
{
    // do what you want to do
}

abc.js

代码语言:javascript
复制
qt.showCities();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14127098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档