#QT实现UI界面控制小海龟

#QT实现UI界面控制小海龟

1、启动终端(Ctrl+Alt+T),新建一个工作空间

lzw08@ubuntu:~$ mkdir -p ros_ws/src

说明:mkdir是新建一个文件夹/目录的命令,-p表示可以创建多级目录,即在文件夹”ros_ws“内再创建一个”src“文件夹。

2、进入工作空间并对其进行编译(catkin_make)

lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ catkin_make

说明:编译完成后ros_ws里面会出现两个新的文件夹devel和build,这时ros_ws才称得上是真正意义上的工作空间。
在这里插入图片描述

3、进入src文件夹内创建工作包

lzw08@ubuntu:~/ros_ws$ cd src
lzw08@ubuntu:~/ros_ws/src$ catkin_create_pkg turtle roscpp rospy std_msgs

说明:所谓的工作包也是文件夹,它必须创建在工作空间内的src里面。catkin_create_pkg是创建工作包的命令,“turtle”是工作包的名字,后面跟的都是工作包的依赖。
在这里插入图片描述
创建完工作包后,它里面包含上图四个部分,其中,src是用来放置.cpp文件的,CMakeLists.txt里面写了很多内容,编译时根据其里面写的编译规则进行编译。

4、新建C++代码,实现UI界面

1)新建.cpp文件

lzw08@ubuntu:~/ros_ws/src/turtle$ cd src
lzw08@ubuntu:~/ros_ws/src/turtle/src$ touch turtle_qt.cpp

说明:.cpp 文件都是放在工作包里面的src目录下的,所以要先进入到工作包里面的src目录才能新建.cpp文件

2)打开.cpp文件并粘贴代码

lzw08@ubuntu:~/ros_ws/src/turtle/src$ gedit turtle_qt.cpp
#include <iostream> 
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "geometry_msgs/Twist.h"
#include <QtWidgets>
#include <QApplication>

  using namespace std;
  const ros::Publisher *publisherPtr;
  QLineEdit *editLinear;
  QLineEdit *editDegrees;
  QPushButton *btnSend;

  void btnClicked() 
  {
	double linearX = editLinear->text().toDouble();
	double angularZ = editDegrees->text().toDouble();

	//创建消息
	geometry_msgs::Twist twist;
	//填充消息
	twist.linear.x = linearX;
	twist.angular.z = angularZ * M_PI / 180;
	//发送消息
	publisherPtr->publish(twist);
  }

  int main(int argc, char **argv) 
  {
	// 创建节点
	string nodeName = "turtle_qt";
	ros::init(argc, argv, nodeName);
	ros::NodeHandle node;

	//通过节点创建发布者
	string topicName = "/turtle1/cmd_vel";
	const ros::Publisher &publisher = node.advertise<geometry_msgs::Twist>(topicName, 1000);
	publisherPtr = &publisher;

	//创建Qt Application
	QApplication app(argc, argv);
	QWidget window;

	// 设置窗体样式
	window.resize(400, 0);
	window.setWindowTitle("智能机器⼈实验室——海⻳机器⼈控制UI界⾯");

	// 设置布局
	QFormLayout *layout = new QFormLayout();
	window.setLayout(layout);
	
	editLinear = new QLineEdit();
	editLinear->setText("0.0");
	layout->addRow("线速度", editLinear);
	
	editDegrees = new QLineEdit();
	editDegrees->setText("0.0");
	layout->addRow("⻆速度", editDegrees);

	btnSend = new QPushButton("发送");
	layout->addRow(btnSend);

	//显⽰窗体
	window.show();
	
	//点击事件
	btnSend->connect(btnSend, &QPushButton::clicked, &window, btnClicked);

	return app.exec();
  }

5、点击右上角的保存,然后关闭.cpp文件

6、回到上级目录,即工作包里面,修改CMakeLists.txt文件

lzw08@ubuntu:~/ros_ws/src/turtle/src$ cd ..
lzw08@ubuntu:~/ros_ws/src/turtle$ gedit CMakeLists.txt 

1) 把右下角的“显示行号”打开:

在这里插入图片描述

2)第24行敲回车,粘贴以下代码:

##############################################################################
# Qt Environment
##############################################################################
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
set(CMAKE_AUTOMOC ON) 
find_package(Qt5 COMPONENTS Core Gui Widgets PrintSupport)
##############################################################################

在这里插入图片描述

3)第144行注释打开,改成下图:

在这里插入图片描述
说明:turtle_qt是节点名,turtle_qt.cpp即步骤4新建的C++代码。

4)第157行~163行改为下图:

   Qt5::Core 
   Qt5::Gui 
   Qt5::Widgets 
   Qt5::PrintSupport

改完之后点击右上角的保存,然后关闭。

7、回到工作空间下编译

lzw08@ubuntu:~/ros_ws/src/turtle$ cd ~
lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ catkin_make

在这里插入图片描述
编译完成没错误就可以运行了。

8、配置环境,然后运行

运行前必须打开一个新的终端运行主节点(roscore),才能顺利运行(任何节点运行前都要先把主节点运行起来)

在这里插入图片描述

lzw08@ubuntu:~/ros_ws$ source devel/setup.bash
lzw08@ubuntu:~/ros_ws$ rosrun turtle turtle_qt 

9、运行结果是一个UI界面

在这里插入图片描述

10、把小海龟运行起来,就可以利用UI界面控制它动起来

lzw08@ubuntu:~$ rosrun turtlesim turtlesim_node

在这里插入图片描述

11、给定一个线速度与角速度值,小海龟便能动起来

在这里插入图片描述

12、补充几个常用快捷键

1)Tab

用来补全命令或者文件夹名、节点名等

2)Ctrl+C

结束节点/命令的运行

3)Ctrl+L

清屏,相当于“clear”。但是不是删除,滑动鼠标滚轮还是可以找到之前输入的内容

4)Ctrl+Alt+T

打开一个新的终端

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用Qt实现科技Windows软件界面的示例代码: ```cpp #include <QApplication> #include <QWidget> #include <QLabel> #include <QHBoxLayout> #include <QVBoxLayout> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主窗口 QWidget *mainWindow = new QWidget(); mainWindow->setWindowTitle("科技Windows软件界面"); // 创建顶部区域 QLabel *titleLabel = new QLabel("欢迎使用科技Windows软件界面"); titleLabel->setObjectName("titleLabel"); QLabel *logoLabel = new QLabel(); QPixmap logoPixmap(":/images/logo.png"); logoLabel->setPixmap(logoPixmap.scaled(64, 64)); logoLabel->setObjectName("logoLabel"); QHBoxLayout *topLayout = new QHBoxLayout(); topLayout->addWidget(titleLabel); topLayout->addStretch(); topLayout->addWidget(logoLabel); // 创建中间区域 QLabel *contentLabel = new QLabel("这是一个使用Qt实现科技Windows软件界面"); contentLabel->setObjectName("contentLabel"); // 创建底部区域 QLabel *bottomLabel = new QLabel("版权所有 © 2021 科技Windows软件界面"); bottomLabel->setObjectName("bottomLabel"); // 创建布局 QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->addLayout(topLayout); mainLayout->addWidget(contentLabel); mainLayout->addWidget(bottomLabel); // 设置样式 QFile styleFile(":/qss/style.qss"); styleFile.open(QFile::ReadOnly); QString style = QLatin1String(styleFile.readAll()); app.setStyleSheet(style); // 设置主窗口布局 mainWindow->setLayout(mainLayout); mainWindow->show(); return app.exec(); } ``` 需要注意的是,上面的代码中使用了样式表文件 `style.qss`,该文件包含了界面的样式定义,可以在Qt Creator中创建一个新的QSS文件,编写样式定义。 希望这个示例代码可以帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值