QGC之qml学习

本文介绍了QGCToolBarButton控件的使用场景及其在QGroundControl项目中的具体位置。该控件位于QGCToolBarButton.qml文件内,并在MainToolBar.qml中被多次引用。文章还解释了QML资源文件的组织方式及如何通过qmldir文件来定义模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QGCToolBarButton

这个控件是QGCToolBarButton.qml中。
在qgroundcontrol.qrc/qml/QGroundControl/Controls/QGCToolBarButton.qml中。
在MainToolBar.qml程序的主界面中:引入了这5个QGCToolBarButton
在一个qrc文件维护的qml中,如果qresource prefix相同的情况下

<qresource prefix="/">
    <file>main.qml</file>
    <file>MyButton.qml</file>
</qresource>

每个目录下有一个qmldir的文件,格式如下:
Module QGroundControl.Controls

AnalyzePage 1.0 AnalyzePage.qml
AppMessage 1.0 AppMessage.qml

### QML与C++交互方式 在QGroundControl(QGC)项目中,为了使C++逻辑层能够与基于QML的用户界面进行有效通信,采用了多种机制来确保两者之间的无缝协作。 #### 注册自定义类型至QML环境 通过`qmlRegisterType<ExternalWindow>("QGroundControl.Controls", 1, 0, "ExternalWindow")`这行代码,在`QGCApplication.cc`文件里完成了将特定类型的C++类暴露给QML的工作[^1]。这意味着开发者可以在QML侧像使用原生组件一样轻松实例化并操作这些由C++编写的对象。 #### 使用`Q_INVOKABLE` 对于希望被QML调用的方法,则需在其声明前加上`Q_INVOKABLE`宏。此方法使得该成员函数可以从QML脚本内部触发执行,并且可以传递参数以及接收返回值。这种方式极大地简化了数据交换过程,同时也保持了一定程度上的封装性和安全性。 ```cpp class MyClass : public QObject { Q_OBJECT public slots: void normalSlot(); // 可以从QML调用但是更推荐下面的方式 Q_INVOKABLE int add(int a, int b); // 推荐用于简单功能接口 }; ``` 上述例子展示了如何标记一个简单的加法运算作为可被远程访问的服务;一旦如此处理之后,任何关联到此类的对象都能够直接利用这个能力而无需额外中介结构的支持。 #### 数据绑定与信号槽机制 除了直接的方法调用外,另一个重要方面就是属性同步——即当某个变量发生变化时自动通知视图更新显示内容。为此目的设计了一个强大的连接体系:每当源端发出改变事件(emit signal),目标端就会相应调整自己状态(slot)。这种模式不仅限于单向传播,还可以构建双向反馈回路从而形成动态响应式的用户体验[^2]。 综上所述,在QGroundControl项目内实现了高效的跨语言编程实践案例,既发挥了现代图形库易用直观的特点又保留住了底层算法高效稳定的特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值