前言
相信很多做机器人人机交互界面开发的相关的人员都会接触或使用Qt,在ros的wiki上也存在着qt_ros的使用方案,但是界面大多数都以UI文件为主,但是有时候这并不能满足我们的需求,我们需要开发的界面更加炫酷,或者增加一些动画效果,这时候我们就可以使用使用QML进行混合开发,接下来我们就给大家介绍一下在Qt中开发人机交互界面中使用QML来渲染界面以便于制作更多图形特效。
操作步骤: 1、 创建一个qt_ros功能包。
2、 修改功能包下的CMakeList.txt文件 在find_package()中添加QuickWidgets 在set()中添加Qt5::QuickWidgets 在添加Qt模块时如果发现该模块找不到,可以通过命令sudo apt-get install qtxxxxxxx-dev解决。
3、 创建qml文件,并且将其加入到资源文件中,然后进行qml文件的编写。
4、 在ui设计中选择QQuickWidget控件 可以在属性中添加qml文件,也可以使用setSource函数进行添加。
5、 运行,这时可能会报错 提示:module "Qtxxxxxx" is not installed 解决方案:sudo apt-get install qml-module-qtxxxxxx。
6、 然后再次进行编译就可以发现qml文件实现在空间QQuickWidget中了。
7、 C++与QML进行交互 在这种情况下,使用信号与槽方法是可以进行交互的。 首先,在C++文件中添加头文件
#include #include QObject *root = ui->quickWidget->rootObject(); QObject::connect(this,SIGNAL(set(double,double)),root,SIGNAL(test(double,double)));//信号连接信号 QObject::connect(root,SIGNAL(clickedMap(double,double)),this,SLOT(onMap(double,double))); xx.qml
signal test(double value1,double value2); signal clickedMap(double value1,double value2); onTest:{ }
在cpp文件中触发set(double,double)信号后会出发qml中的test信号然后调用到qml中的onTest:{} 而在qml文件中使用clickedMap(double value1,double value2)也会调用到cpp文件中绑定的槽函数。
上述操作完成即可进行交互。
案例展示: 用qml实现了一个可缓存的离线地图,然后在通过无人机的实时经纬度在地图上进行无人机图标的移动和标记航线以及根据偏航角的改变对应改变地图上无人机图标的偏航角。 原文视频演示:
版权声明:本文为CSDN博主「msq19895070」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/msq19895070/article/details/121853386