javascript - Qt Qml Javascript - 在哪里使用哪个?

标签 javascript c++ qt qml

我是 Qt 和 Qml 的新手,我想弄清楚它们是如何协同工作的。
我对在哪里使用 C++ 和在哪里使用 JavaScript 感到困惑。假设我有几个 QML 对象(如表单、输入、下拉列表等)。现在显然这些组件有一些逻辑代码。我应该用 JavaScript 还是 C++ 编写此逻辑代码?假设我的输入有一组属性和信号。这些应该在哪里以及如何编码?如果我应该用JavaScript写,那C++怎么用。 C++ 和 JavaScript 是如何连接的?我很困惑!而且文档也没有帮助我。 谢谢

最佳答案

QML 语言是为了描述接口(interface)而发明的。它旨在让设计人员易于理解。

这意味着在程序中,您通常会使用 C++ 实现所有逻辑,并使用 QML 实现 UI。为了在 C++ 和 QML 之间建立联系,有必要将一些 C++ 代码暴露给 QML。有很多方法可以做到这一点。 例如,您可以使 C++ 类在 QML 中可用(参见 http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html ),只需使单例实例在 QML 中可用或将 QObject 指针注入(inject) QML 环境。所有这些都大量使用 Qt 元对象系统 ( http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html )。

// in C++
class MyClass
{
    Q_OBJECT
public slots:
    int doSomething();
   ...
};

int main()
{
...
   engine->rootContext()->setContextProperty("foo", new MyClass());
...
}

// in QML

function foobar() {
    var anInt = foo.doSomething();
}

QML 允许您编写 javascript,您也可以在不使用 C++ 的情况下编写完整的程序,在 javascript 中实现所有内容。 但这通常不是一个好主意,尤其是当您需要表演时。

不像某些人说的那样,C++ 不是用来扩展 QML 的。但 QML 在这里为 C++ 对象提供了一个简单的接口(interface),允许开发人员和设计人员创建精美的 UI,而无需输入/学习 C++。

我写QML的个人原则是尽快转到C++。当然,您可以在 QML 中编写简单的函数,但您必须使它们保持简短,以充分利用底层 QML 和 JS 引擎的优化功能。保持 QML 快速非常困难,Qt 文档中有一整页内容介绍了使用 QML 时应考虑的事项 (http://doc.qt.io/qt-5/qtquick-performance.html)。

关于javascript - Qt Qml Javascript - 在哪里使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47287047/

相关文章:

javascript - D3轴标签刻度

c++ - 填充指针数组,退出时删除

c++ - 代码::阻止问题运行

c++ - 生成一个 boost-python 引用

c++ - QImage:如何正确销毁指向像素数据的指针?

javascript - 使用 jQuery 预激活链接

javascript - Marionette 中的 Hook 后退按钮(onbeforeunload 不起作用)

c++ - 在 Visual Studio 2015 中使用 QCharts 时未解析的外部符号

javascript - 单击表格单元格重新运行 jquery

c++ - Qt 未解析的外部符号 LNK2019