【发布时间】:2017-11-29 16:59:16
【问题描述】:
我正在尝试编写一些与 QML 对象交互的 Qt C++ 代码。目标是将 TCP 套接字上接收的字符串附加到 GUI 上的文本日志中。每次收到新字符串时,我都会运行 appendText() 函数。我有一个当前工作的实现,它使用 QWidgets 和 .ui 文件。我需要一个相同的 QML 实现。我的 QWidget 实现使用 textBrowser 和 append 函数,如下所示。 “theString”随着程序的运行而变化,每个变化都会被附加,填满文本日志。
//update the text log with data received on TCP socket
void MainWindow::appendText() {
ui->textBrowser->append(theString);
}
这给了我想要的结果,将每个字符串附加到文本框中。输出应该如下所示。
Control connection successful.
Data connection successful.
Control Packet Receieved:
1
Control Packet Receieved:
2
Control Packet Receieved:
3
Control Packet Receieved:
4
Control Packet Receieved:
1
Control Packet Receieved:
2
Control Packet Receieved:
3
Control Packet Receieved:
4
但是,当使用以下代码执行我认为与 QML 对象相同的功能时...
//update the text log with data received on TCP socket
void MainWindow::appendText() {
QMetaObject::invokeMethod(textbox, "append", Qt::DirectConnection, Q_ARG(QVariant, theString));
//QQmlProperty(textbox, "text").write(theString);
}
它只附加前两个字符串,除此之外没有更多。输出看起来像这样。
Control connection successful.
Data connection successful.
我已经广泛查看了在 C++ 中调用 QML 方法的文档,但仍然没有任何运气。任何帮助表示赞赏。感谢您的宝贵时间。
【问题讨论】: