QGC地面站二次开发,实现添加按钮,并添加一些按钮功能

时间:2024-04-04 08:08:42


前言

在QGC最上面一栏添加一个按钮,单击出现一个文本框,背景为白色到黑色渐变,里面有两个按钮,点击Sender会自身改变颜色并给Receiver发送信号,同时Receiver也会改变颜色并显示点击的次数。
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能

一、打开MainRootWindow.qml

找到槽函数function viewSwitch(isPlanView),这里是为了当点击最上面按钮,主界面内容发生改变,因此默认设置主界面不显示。因此仿造上面的analyzeWindow写一个对应的。
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
然后这里是为了设置当点击最上面图标按钮的时候,对应的主界面内容发生改变,因此设置仿造上面function showAnalyzeView()写一个对应的。
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
最后这里是给自己所添加的按钮动态加载QML组件的来源,因此仿造上面的Loader写一个对应的。

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能

二、打开MainToolBar.qml

找到QGCToolBarButton,这个就是自己添加按钮的实现函数,仿造上面的analyzeButton写一个。
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
icon.source就是设置图标的来源,这里我用了QGC自带的一个图标。
onClicked就是点击事件,根据之前设置的function槽函数,这里改成mainWindow.showMyAddView()。

三、之前的修改只是为了在QGC最上面添加一个按钮图标,因此为了实现点击按钮后的功能,需要自己添加qml文件。

1.新建qml文件

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
MyAdd.qml里面的内容可以参考AppSettings.qml,为了实现之前所说的功能,还需要按照之前的方法添加背景(MyAddBackground.qml),按钮(MyAddButton.qml),接收(Receiver.qml)和发送(Sender.qml)这4个qml组件。

2.背景组件(MyAddBackground.qml)

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
设置渐变色,从白色到黑色
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能

3.按钮(MyAddButton.qml)

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
这里的两个property是把按钮内容和按钮颜色导出后的属性,方便以后在其他地方修改
QGC地面站二次开发,实现添加按钮,并添加一些按钮功能

4.接收(Receiver.qml)

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
①MyAddButton:Receiver继承于MyAddButtonMyAddButton
②function槽函数:当这个槽函数触发的时候,其内容和按钮颜色都发生改变
③SequentialAnimation动画:当槽函数内容发生变化的时候,其颜色会从红色到蓝色来回变化,默认关闭

5.发送(Sender.qml)

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
①MyAddButton:Receiver继承于MyAddButtonMyAddButton
②property是自定义属性,计数值为0
③signal信号函数,把信号发送给Receiver,
④property是自定义属性,目标是Receiver,默认为null
⑤onTargetChanged函数是当目标的值发生改变的时候,将send信号的连接到receive槽函数上⑥MouseArea是设置鼠标的处理,并设置区域占满整个按钮,当点击的时候发送信号,并且sender的计数值改变;当按钮被按下去的时候,按钮颜色变成蓝色;当按钮弹起的时候,按钮颜色变成红色。

6.MyAdd.qml

QGC地面站二次开发,实现添加按钮,并添加一些按钮功能
首先添加MyAddBackground组件,接着再上门添加Sender和Receiver组件,并设置内容和颜色。然后在Sender中给target赋值,当target的值由null转为receiver的时候,就会触发Sender的槽函数,最后send会将这个信号和对应的receive槽进行连接,所以当点击Sender的时候,Receiver的值就会发生改变。

总结

自己研究了好久才弄成由于是最新的4.0.0版本的QGC,所以很多之前的教程都不能用了,很多函数名字都变了,对于小白的我来说太不友好了。

参考

QGC地面站二次开发教程三
Qt入门课堂 | 第三讲 QML信号槽及属性绑定