
QT
文章平均质量分 78
蒋程扬
古月居签约作者,古月学院《如何开发一个ROS人机交互软件》原创作者。联系方式:chengyangkj@qq.com
展开
-
Ubuntu protobuf编译安装并在Qt中使用
一,编译protobuf首先去github下载最新protobuf的C++的relaease版本:release链接这里我下载的是v3.17.3解压到任意文件夹,进入文件夹:编译安装官方提供的有教程执行如下命令进行编译安装: ./configure make make check sudo make install sudo ldconfig 执行完make install,protobuf的头文件和lib文件则被成功的复制在 /usr/local路径下此时在终端输入如下命令,原创 2021-07-27 19:03:32 · 1954 阅读 · 2 评论 -
qss设置边框阴影
以QLabel为列:设置Qss如下QLabel{border-top: 5px solid qlineargradient(y0:0, y1:1,stop: 0 #ececef, stop: 1 white);border-left: 5px solid qlineargradient(x0:0, x1:1,stop: 0 #ececef, stop: 1 white); border-bottom: 5px solid qlineargradient(y0:0, y1:1,stop: 0 whi原创 2021-02-25 15:07:23 · 6864 阅读 · 1 评论 -
笔记——QByteArray与有符号整型(int)之间的相互转换
关于10进制转换为16进制有符号转换方法:十六进制转换为有符号的10进制数(-128-127)第一位做为符号,0为正数,1为负数。对正数,后7位的值即为数值。对负数,128减后7位表示的数即为负号后的值。如1110 1100(EC)为负数,后7位的值为6c,即616+12=108,128-108=20,此数为-201111 1111(FF)为负数,后7位的值为7f,即716+15=127,128-127=1,数为-11100 1110(CE)为负数,后7位的值为4e,即416+14=78,1原创 2021-02-21 11:15:26 · 11856 阅读 · 0 评论 -
ROS Qt5 librviz人机交互界面开发十三(显示话题列表)
本系列教程文章专栏:ROS机器人GUI程序开发本系列课程已上线古月学院,欢迎感兴趣的小伙伴订阅:ROS Qt开发环境搭建以及基础知识介绍ROS人机交互软件的界面开发ROS Rviz组件开发方法开发交流QQ群: 797497206完整项目代码:github文章目录一,实现效果二,核心API三,程序中调用一,实现效果可以显示多机/单机话题列表,就是在终端使用rostopic list查看话题列表的功能实现,主要参考文献:ROS WIKI二,核心API主要就是这么两句:ros:原创 2020-08-08 12:00:25 · 3911 阅读 · 3 评论 -
ROS Windows 人机交互软件开发探索与总结一(开发环境搭建及ROS Win10 Qt功能包的编译运行)
前言在ROS librviz 人机交互软件开发系列教程中我们实现了Ubuntu端的界面开发。但是很多小伙伴问到能不能在Windows上进行开发,当时回复是不能,主要就是库的依赖问题难解决。但是我想了想ROS是有windows版本的,并且也能运行rviz之类的,既然rviz都可以在windows上运行,就说明是有库可以支持的。于是本人又进行了一番探索与总结.本篇教程主要是介绍ROS Windows开发环境的搭建,ROS Windows基本的使用。以及在Windows中编译ROS Qt功能包。实现效果1转载 2020-07-27 16:09:42 · 3621 阅读 · 0 评论 -
ROS Qt5 librviz人机交互界面开发十二(订阅图像话题并在界面中显示)
这篇文章主要实现Qt中订阅Ros图像话题,并在界面中Label上显示一,实现效果二,添加依赖首先在功能包的CMakeLists.txt中添加依赖(ensor_msgscv_bridgeimage_transport)find_package(catkin REQUIRED COMPONENTS rviz roscpp sensor_msgs cv_bridge std_msgs image_transport )三,订阅话题 ros::NodeHandl原创 2020-05-12 10:56:35 · 5357 阅读 · 7 评论 -
ROS Qt5 librviz人机交互界面开发十一(显示机器人URDF模型)
一,实现效果二,核心代码和前面创建图层一样,通过manager_创建一个图层: rviz::Display* RobotModel_=NULL;//显示robotModel void QRviz::Display_RobotModel(bool enable) { if(RobotModel_==NULL) { RobotModel_=manager_->createDisplay("rviz/RobotModel","Qrviz Ro原创 2020-05-12 10:43:07 · 4674 阅读 · 9 评论 -
opencv视频拆分为图片帧,帧合成视频(mp4,avi)软件,附完整项目
项目需要,对视频进行处理,需要将视频拆分为图片帧,拆帧分为三种模式:自定义拆帧(指定开始时刻和结束时刻,并拆分为图片帧)等长拆帧 (间隔一定时长,将每段时长视频帧进行拆分)截取单帧 (截取某个时刻的画面帧)视频合成 (将某一文件夹下的图片合成为视频支持avi,mp4)一,加载视频二,自定义拆帧三,等时长拆帧四,截取单帧五,帧合成视频六,完整项目g...原创 2020-05-04 16:51:27 · 4186 阅读 · 1 评论 -
ROS Qt5 librviz人机交互界面开发十(实现定点返航功能)
这个功能实现起来也不难,主要就是先监听amcl_pose话题,获取小车在地图上的实时位置,如果点击设置返航点了则记下此位置,点击返航时则把该位置作为返航目标话题发送出去一,配置package.xml由于获得机器人位置的话题类型是geometry_msgs所以需要添加功能包对此话题的支持在package.xml文件添加如下两行: <build_depend>geometry_ms......原创 2020-04-13 20:42:28 · 2735 阅读 · 0 评论 -
ROS Qt5 librviz人机交互界面开发八(实现导航功能的完整显示)-全网首发
在上一篇教程我们已经实现导航的初始点和目标点的设置:ROS Qt5 librviz人机交互界面开发七(发布导航目标点和原点位置)-全网首发这一篇主要实现完整显示,在文章末尾有完整项目地址哦~一,显示效果设置初始点:设置目标点:二,核心代码如果看过前几篇博客,其实也就是添加几个图层:核心代码: //显示导航相关 void QRviz::Display_Navigate(bool......原创 2020-04-11 20:24:33 · 4499 阅读 · 1 评论 -
ROS Qt5 librviz人机交互界面开发七(发布导航目标点和原点位置)-全网首发
在前面几篇教程中我们已经实现了订阅map话题,这篇我们主要就是实现rviz中的设置目标点和初始点的功能一,实现效果:在地图上选点后librviz就会自动进行变换,发布目标点信息实现如下:可以发现控制台提示已经发布了位置点话题:在下一篇博客继续实现完整导航功能二,核心代码其实核心代码也就两三句,但是目前网上关于librviz的资料少之又少,连官方都没有api说明,只有最简单的一个de......原创 2020-04-11 09:51:10 · 4945 阅读 · 20 评论 -
ROS Qt5 librviz人机交互界面开发六(显示激光雷达点云数据)
最终显示效果:如果按照本人前几篇博客的话进程的话,就很容易实现这个功能了,主要就是用manager添加一个display:核心代码://显示激光雷达void QRviz::Display_LaserScan(bool enable,QString topic){ if(laser_==NULL) { laser_=manager_->createDi...原创 2020-04-08 19:54:10 · 4792 阅读 · 2 评论 -
ROS Qt5 librviz人机交互界面开发五(订阅map话题)
这一篇教程在教程四的基础上进行修改,修改了部分bug,实现了map图层的添加,显示,放大,缩小等:qrviz.h#ifndef QRVIZ_H#define QRVIZ_H#include <QVBoxLayout>#include <rviz/visualization_manager.h>#include <rviz/render_panel.h&g...原创 2020-04-08 12:26:05 · 4589 阅读 · 13 评论 -
Ros机器人Rviz Qt5插件开发(1)——机器人速度控制插件开发
一,创建功能包在工作空间src目录下:catkin_create_pkg cmd_control roscpp rviz std_msgs二,配置功能包2.1添加类到功能包src目录:2.2添加plugin描述文件plugin_description.xml到功能包根目录: <library path="lib/cmd_control"> <clas...原创 2020-04-06 12:31:45 · 6041 阅读 · 5 评论 -
Qt 设置子窗体打开后不可操作父窗体
使用setWindowModality(Qt::ApplicationModal);方法即可实现阻塞除当前窗体外的其他所有窗体 addtopic_form=new AddTopics(); //阻塞其他窗体 addtopic_form->setWindowModality(Qt::ApplicationModal); addtopic_fo...原创 2020-04-03 18:00:41 · 7737 阅读 · 0 评论 -
qt设置父窗体关闭后同时关闭子窗体
首先重写closeEvent:并加入这一行代码即可this->setAttribute(Qt::WA_DeleteOnClose);void MainWindow::closeEvent(QCloseEvent *event){ //关闭时释放内存 this->setAttribute(Qt::WA_DeleteOnClose); WriteSettings()...原创 2020-04-03 17:43:08 · 2183 阅读 · 2 评论 -
Qtreewidget的使用及添加控件实现属性编辑器(textbox,combox,spinbox等)
之前使用treeview想要添加标准控件发现好像不能添加,查找资料发现可以使用treewidget实现:实现效果:主要是使用setItemWidget()方法实现添加控件,主要代码://treeWidget_rviz ui->treeWidget_rviz->setWindowTitle("Displays"); ui->treeWidget_rviz-&g...原创 2020-04-03 13:13:53 · 7164 阅读 · 0 评论 -
qt安装ROS环境
下载qt_ros离线安装包网址https://qtcreator-ros.datasys.swri.edu/downloads/installers/选择文件Ubuntu 18.04.2 LTS (Bionic Beaver)Ubuntu 16.04.6 LTS (Xenial Xerus)Ubuntu 14.04.5 LTS (Trusty Tahr)根据系统版本选择相应的目录下...原创 2020-02-23 21:39:08 · 1204 阅读 · 0 评论 -
QT在自定义类里面添加Q_OBJECT后还是不能使用信号与槽解决方法
qt最强大的就是信号与槽机制,想要在自定义类里面使用信号与槽机制,只需继承与Qobject,并且加上Q_OBJECT就行了,class threadWorks:public QObject{ Q_OBJECT但是加上后还是报错:undefined ......这是因为添加后需要重新编译:右键项目名称,按照以下步骤:(1)清除工程(2)qmake(3)构建完美jiej...原创 2020-01-07 12:06:52 · 1981 阅读 · 3 评论 -
qt 使用QProcess调用控制台命令
由于项目需要使用ffmpeg进行实现图片合成视频,本来打算使用c++版本的ffmpeg代码进行实现,奈何代码看都看不懂,时间赶的紧,于是决定直接调用控制台版本的,代码如下,非常简单://记录执行的时间 QTime time; time.start(); //初始化process对象 po = new QProcess(this);//绑定命令开始执行...原创 2019-12-31 22:03:36 · 2388 阅读 · 0 评论 -
qt linux 调用外部库文件 (safenet加密狗开发一)
一加密狗开发基本原理:经过我的探索,加密狗的基本原理就是每个加密狗有不同的id,根据加密狗的id生成独一无二的库文件,然后再在程序中加入vendorcode文件,比对插入的加密狗和code文件,如果匹配就识别成功,否则不成功。这里我在safenet的技术人员的帮助下,已经在windows上成功生成了我这一套加密狗的库文件(因为是linux所以是.a文件),替换原有的库文件,成功的把例程跑起来了...原创 2019-11-30 17:10:45 · 1006 阅读 · 0 评论 -
QT错误:collect2:ld returned 1 exit status解决方法
在写c++程序时遇到这个问题一般是控制台没关,又运行,而在qt中是因为:在.h里面声明的相关槽函数,而在cpp文件里没有进行声明实现,所以导致这个问题原创 2019-05-08 16:44:02 · 7212 阅读 · 2 评论 -
qt-5.3 linux 无法使用搜狗输入法的问题
之前用的是qt5.3 无法使用fcitx框架的输入法按照网上的教程折腾;了两天不管怎么试都无法使用最后下载了个5.7版本的重新安装后,按照教程,完美解决,特此记录下来网上教程:1.安装fcitx-frontend-qt5sudo apt-get install fcitx-frontend-qt5找到以下路径的文件/usr/lib/x86_64-linux-gnu/qt5/plu...原创 2019-04-30 23:46:28 · 698 阅读 · 1 评论 -
linux为可执行程序创建快捷方式(qt)
在源码安装完成qt后发现qt没有快捷方式,这需要我们手动生成:创建快捷方式文件:sudo vi /usr/share/applications/QtCreator.desktop文件如下:Exec=放可执行程序位置icon放图片地址[Desktop Entry]Encoding=UTF-8Name=QtCreatorComment=QtCreatorExec=/home/c...原创 2019-04-30 23:50:50 · 2839 阅读 · 0 评论 -
qt在线程中 套接字的connect监听 readyRead()读不到数据
先贴代码:while (1) { if(isStop) return; if (!udpSocket){ //当指针为空时新建对象 udpSocket = new QUdpSocket(); udpSocket->bind(QHostAddress::AnyIPv...原创 2019-05-09 17:14:54 · 5422 阅读 · 1 评论 -
QT多线程-继承QThread实现
qt实现多线程的第二种方法 继承QThread新建一个类,继承QThreadclass server : public QThread并且将run方法进行重写:protected: virtual void run(); //线程的run函数新建类的对象启用start方法: server_socket = new server(port); server_soc...原创 2019-05-30 16:12:33 · 645 阅读 · 0 评论 -
linux下QT项目的动态编译打包发布
一,使用release编译项目:但是我发现在debug模式下编译没有问题,但是在release模式下会报错:很迷,经过尝试后我发现,把shadow build的目录改为项目相同目录,即可编译成功:二,使用脚本复制相关可执行文件到目录复制编译后的文件到新的文件夹:1,编写pack.sh:#!/bin/sh exe="video_client" #你需要发布的程序名称des="...原创 2019-05-30 16:31:25 · 1985 阅读 · 0 评论 -
ubuntu安装QT5.7.1
一,更换系统源:安装Ubuntu后需要更换系统软件源:sudo nano /etc/apt/sources.list注释所有,添加中科大源:deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multive$deb-src https://mirrors.ustc.edu.cn/ubuntu/ ...原创 2019-07-22 11:55:57 · 1447 阅读 · 0 评论 -
基于Opencv+QT的视频播放器(实现进度条功能,播放暂停快进功能)
项目需要实现类似这个功能,可是在网上找了许多用opencv实现的,但是都是简单的能使用一个死循环播放,没有进度条等功能,于是自己动手写了下配置好qt和opencv环境后点击.pro文件导入项目,即可进运行功能:实现进度条拖拉拽视频播放暂停视频快进慢放视频的片段拆分为图片帧效果图:核心代码:灵活控制循环,实现播放,暂停,快进慢放功能话不多说,上代码:github...原创 2019-08-07 10:46:04 · 6450 阅读 · 1 评论 -
QT+Opencv重写label控件,在label上画框,截图功能,实现对视频的ROI区域的截取(含完整项目代码)
QT+Opencv实现对视频的ROI区域的截取(保存为新的视频)网上有许多对QT label重写,实现在label图片上画框,但是都是部分代码,我这里含有完整的代码,方便理解功能:打开视频,获取视频的基本信息和第一帧用户通过截取矩形,截取ROI感兴趣区,点击确定合成新的只有感兴趣区的视频帧固定大小放置在窗口,简单的截取会导致图片失真,所以实际获取的坐标为按照比例,在真实图片上的坐标...原创 2019-08-07 18:28:49 · 4748 阅读 · 8 评论 -
QT 继承 Qobject实现多线程
Qt实现多线程的方法有很多种,不过通过继承Qobject这一种方法可以使用信号与槽函数与线程间进行通讯:一,创建自己的继承Qobject的线程类connect_thread.h:#ifndef CONNECT_THREAD_H#define CONNECT_THREAD_H#include <QObject>#include <QThread>class c...原创 2019-04-28 15:21:05 · 1986 阅读 · 0 评论