微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt WebChannel API 在客户端不工作

如何解决Qt WebChannel API 在客户端不工作

我正在尝试使用 Qt WebEngine 和 WebChannel API 从 C++ 小部件向 JavaScript 发出信号。预期的行为是,当我单击 tableView 小部件中一行的 name 列时,应该会出现一个新的小部件窗口,其中包含来自该行的一些额外数据。目前,如果我添加一个按钮并将其连接到发出信号的插槽,它就会工作(JavaScipt 文件中的 connect 方法工作)。但是,我希望当我单击该列时,它会自动将数据发送到 JS,而无需单击按钮。目前我只是发送一个 QString,但稍后我还需要发送其他复杂数据。如果我在 myWidget.cpp 文件中执行如下操作,则不会在 JS 中调用 connect 方法

// The slot
void myWidget::getData(QString data)
  {
    emit sendDataToJS(data);
    qDebug() << "getData clicked" << data;
  }

在 .h 中:

public slots:
    void getData(QString txt);
signals:
    void sendDataToJS(const QString& seq);

在 main.cpp 中

// Initializing the window:
myWidget* widget = new myWidget();
widget->getData(data); 
widget->show();

但是如果我添加一个按钮并在构造函数添加连接方法,那么它就可以工作(但在这种情况下我必须单击按钮,我不想要那样)

//Works
  myWidget::myWidget(QWidget* parent) :
      QWidget(parent),ui(new Ui::myWidget)
  {
    ui->setupUi(this);
    QPushButton* btn = new QPushButton("Click here to visualize...");
    QWebEngineView* view = new QWebEngineView(parent);
    QWebChannel* channel = new QWebChannel(this);
    view->page()->setWebChannel(channel);
    channel->registerObject(QString("jsObj"),this);
    connect(btn,SIGNAL(clicked()),this,SLOT(slotSendDataToJS()));
    view->load(QUrl("qrc:/new/data_viz.html"));
    ui->gridLayout->addWidget(btn);
    ui->gridLayout->addWidget(view);
  }

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

  void myWidget::slotSendDataToJS()
  {
    QString data= "TESTING_123!";
    qDebug() << "emitting signal..." << data;
    emit sendDataToJS(data);
  }

JavaScript 代码

        document.addEventListener("DOMContentLoaded",function () {
        console.log("DOM Loaded...");
        new QWebChannel(qt.webChannelTransport,function(channel){

        var JSObj = channel.objects.jsObj;

        JSObj.sendDataToJS.connect(function(data) {
                console.log("Inside connect!");
                document.getElementById("data").innerHTML = data;
            });
        });
        });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。