- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 QtQuick 程序,它作为用户和一些 CLI 应用程序之间的智能接口(interface)。我已经实现了 QtQuick + JavaScript 应用程序。
QtQuick 按钮发出由 C++ 层监听的信号。到目前为止一切正常。
但是,在我的 C++ slot 函数中,我需要写入 QtQuick 应用程序中的某个项目。此项目是一个文本区域,用作 CLI 应用程序的日志输出。这些 CLI 应用程序从 C++ 中的 slot 函数运行。我将它们的输出存储到一个变量中,我想在此日志输出 TextArea 中显示该变量的输出。
我尝试了很多东西,但我没有找到正确的方法来做到这一点
最佳答案
我遇到了类似的问题。我就是这样解决的。
在 C++ 中,我创建了一个使用 QProcess 处理命令的类(并将该类公开给 QML),它将 readyToRead 信号附加到我公开的类中的 C++ 函数,该函数发出另一个信号 showOutput 与输出文本。
根据这些信息,我只需将我的新信号连接到 qml 中的 javascript 函数:
cppExposed.showOutput.connect(jsFunction);
在 javascript 函数中我只是附加文本
function jsFunction(output) {
OutputTextArea.text += output;
}
要将 C++ 属性公开给 QML,您可以查看此处的文档:http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html
我认为最简单的方法是创建一个 cpp 类的对象,并在加载 main.qml 之前在 main.cpp 中设置为上下文属性:像这样:
QQmlApplicationEngine engine;
ProcessHandler procHandler;
engine.rootContext()->setContextProperty("procHandler", &procHandler);
现在您可以直接从 QML 访问您的对象,并且可以连接信号
procHandler.showOutput.connect(jsFunction)
并且在您的 C++ 类中不要忘记连接进程 ReadyToReady 信号并使用数据发出您自己的信号:
void readyToRead() {
emit showOutput(m_proc.readAllStandardOutput());
}
更新:您的属性应该在引擎加载 QML 文件之前设置:
AnalyzeSignal analyzeSignal;
engine.rootContext()->setContextProperty("analyzeSignal", &analyzeSignal);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
而且我认为您不需要将 writeToLogOutput 作为属性(顺便说一句,它有一些语法错误),它是一种信号方法,对吗?因此,它会自 Action 为信号而不是属性提供给 QML。
不要创建新的 QQMLContext。在这一行中,您正在做的是创建一个新的 QQMLContext
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextProperty("analyzeSignal", &analyzeSignal);
这是行不通的,因为您将属性设置为新创建的上下文,而不是原始根上下文。
关于C++ 信号和访问 QtQuick 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030215/
Qt Quick Templates 弹出窗口与 QtQuick Controls 弹出窗口有什么区别? 我从 import QtQuick.Templates 2.0 与 import QtQuic
Qt Quick Templates 弹出窗口与 QtQuick Controls 弹出窗口有什么区别? 我从 import QtQuick.Templates 2.0 与 import QtQuic
当编写不使用 QML 且不依赖于新的 Qt 5 功能的 Qt 应用程序时,我们可以同时使用 Qt 4 和 Qt 5 对其进行编译(除了少数源代码不兼容)。 当我们想要使用 Qt 5 功能但又想退回到等
如何使用 QtQuick 2 绘制矩形并控制它是否显示左边框或右边框或两者? 最佳答案 Rectangle 中有一个 border 属性,允许您向元素添加边框。问题是你不能只显示左边框或右边框。为此,
我一直在寻找如何使我的QtQuick 2.0应用程序的背景透明。我发现的大多数答案都使用 QtDeclarative,这适用于 QtQuick 1.0,但不适用于版本 2。 最后我找到了一个答案,我将
经过几周的断断续续的研究,我仍然没有找到关于如何在 QtQuick 中执行翻译/本地化的全面指南(例如,使用 QML 语言,而不是 C++ 或 Python)。 一般来说,我问的是在 QtQuick
我需要在我的 QtQuick2 应用程序中支持具有相同分辨率的多屏幕。换句话说,当我感觉到辅助屏幕已连接时,我需要扩展我的应用程序。在 QtQuick2 中有可能吗? 最佳答案 我一直在使用 QtQu
我编写了一个 C++ 方法来查找所有串行端口,打开、写入和关闭并使用 Q_INVOKABLE 从 QML 调用此方法。在 QML 中,我首先将 LoadingPage.qml 推送到 StackVie
我有 Qt GUI 应用程序。主窗口包含使用窗口容器放置在其上的 QtQuick 组件: QQuickView * view = new QQuickView (); QWidget * contai
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
背景故事 所以我最近决定尝试使用 Qt。我开始制作 QtQuick 应用程序。在我的设计器 View 中,我有一个按钮和一个鼠标区域。 我想做什么: 当我单击按钮时,我想显示一个带有一些文本的消息框(
当调整 GridView 的大小时,它的元素被重新排列,该元素的动画似乎不起作用。 在这里你可以找到一个简单的例子:http://pastebin.com/BgST6sCv 如果单击示例中的其中一个方
我们正在尝试在 Visual Studio 2015 中运行 OpenVR 模拟器(链接 https://github.com/matzman666/OpenVR-InputEmulator)。构建成
我正在尝试缩放 QQuickPaintedItem,这样事情就会变大,但绘图质量不会变差(即随着项目变大重新触发绘画)。 setScale 方法和我想得到的类似,但是项目内容没有缩放,所以看起来很糟糕
在 Qt/C++ 中有 QT_DEBUG 定义宏来知道它何时在调试或发布时编译。 有什么方法可以知道应用程序是否在 QML 文件中以调试或 Release模式运行? 最佳答案 您可以使用 contex
尝试将 QtQuick.Dialogs 1.(0/1/2) 添加到我的项目时出现以下错误: qrc:/qml/main.qml:4 module "QtQuick.Dialogs" is not in
这个问题其实来自How to scroll to certain row in QML TreeView . QtQuick 项的一些属性是隐藏的,例如 TreeView 中的 __listView。
我想使用 QML 创建一个类似的 UI,如下面的链接所示,这是我在 pyqt5 中使用 Qcompleter 的问题, pyqt5 autocomplete QLineEdit - Google pl
我正在尝试编写一个 QtQuick 程序,它作为用户和一些 CLI 应用程序之间的智能接口(interface)。我已经实现了 QtQuick + JavaScript 应用程序。 QtQuick 按
这个问题在这里已经有了答案: How do I apply the style to a TextField in QML? It seems "style" attribute isn't ava
我是一名优秀的程序员,十分优秀!