如何解决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 举报,一经查实,本站将立刻删除。