c++ - Qt WebChannel API 在客户端不起作用
问题描述
我正在尝试使用 Qt WebEngine 和 WebChannel API 从 C++ 小部件向 JavaScript 发出信号。预期的行为是,当我单击 tableView 小部件中一行的名称列时,应该会出现一个新的小部件窗口,其中包含该行的一些额外数据。目前,如果我添加一个按钮并将其连接到发出信号的插槽,它就可以工作(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;
});
});
});
解决方案
推荐阅读
- c# - BindAttribute 似乎在 ASP.Net MVC Core (2.0.8) 中不起作用
- c++ - 在 C++ 程序中使用 C 库中定义的类型,具有类似方案的命名空间
- unity3d - ARCore Unity Google Cardboard 支持
- javascript - 当 centerMode 为真且无限为假时,Slick.js 删除第一张和最后一张幻灯片上的间隙
- android - Android 模拟器无法启动。屏幕只是黑色/透视
- java - Pebble 模板继承失败且没有错误
- redux - 如何在 saga 中使用 redux 操作关闭 eventSource?
- python - 根据列表中包含的排除值从 Pandas 数据框中删除值
- matlab - 如何在 Matlab 中将 PPM 图像转换为 JPG?
- r - 使用 RcppArmadillo::sample 增量采样时的奇怪行为