QT学习-小结

初衷:最近大BOSS逼着自己做个QT界面,无奈实验室没有人会做前端,看来自己只好来填这个坑,把前端的知识也总结一下


复选框CheckBox
bool isCheck() const
void stateChanged
Text Browser这个控件可以编辑大段文本
这里写图片描述
这里可以设置字体和光标的样式
这里写图片描述
这里可以设置一些复选框的图标
这里写图片描述
QToolButton
这里写图片描述
在这个地方显示,上面是图标,下面是文本:
这里写图片描述
这样就变成了一个浮动按钮:
这里写图片描述
遇到的问题,qt里面没有qrc这个文件夹,然后参考这个人的博客,解决了这个问题;
http://www.cnblogs.com/cszlg/p/3234786.html
最后注意选择release版本,不用debug版本
这里写图片描述
扩展:在qt里面的可以选择一按一起的模式,也即是toggle模式
Qlabel
在Qlabel里面设置对齐方式:
这里写图片描述
这里设置的可以自动换行:
这里写图片描述
往Qlabel当中添加图片
这里写图片描述
这是缩放显示:
这里写图片描述
在qtcreator当中添加另外的一个ui
这里写图片描述


定时器
在主界面当中,我们希望实现的功能:每隔3秒保存一次

这里写图片描述

virtual void timeEvent(QTimerEvent *event);

这里写图片描述


使用多线程进行编程
添加多线程编程
这里写图片描述
这里写图片描述
用于打开打开一个文件,并且把里面的参数传递进去
这里写图片描述

启动线程:
Mytask* m_task=new MyTask();
my_task->start();

回收线程:
my_task->wait();

MainWindow
只有QMainWindow才有菜单的工具栏
添加action
QAction
我们直接将定义好的action拖拽进去
这里写图片描述


制作ROS的界面

遇到的问题:
这里写图片描述
原因是:只有函数的声明,没有函数的定义


设置机器人的图标:
效果:
这里写图片描述
代码:

#include "widget.h"
#include "ui_widget.h"
#include<QPixmap>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPixmap mymap(":/image/image/robot");//这里的路径要写对。第一个写image.qrc当中的image,第二个写image当中的prefix,第三个就是图片的名字
    setWindowIcon(mymap);

}

Widget::~Widget()
{
    delete ui;
}

另外给pushbutton添加图片:
这里写图片描述
这里写图片描述
1

快速配置信号和槽机制
按F4开始配置信号和槽机制
这里写图片描述


int main(int argc, char *argv[])

在这个里面argc 和*argv[]表示在终端运行,argc表示终端下的参数个数,argv表示终端参数的内容


产生对话框:
模态的:就是可以无限制打开的对话
new一个对话框

 QDialog *dig=new QDialog;
 dig->show();

非模态对话框
实例化:

QDialog dig2;
dig2.exec();

由于用system只能在对话框中实现一个ros命令,这个也太不实用了吧,因为我们在实际的使用的时候,需要启动多个launch文件,或者说,要让一些launch保持运行。然后就有了下面的这些程序:

#include "qt03.h"
#include "ui_qt03.h"
#include<QPixmap>
#include<QString>
#include<QProcess>

qt03::qt03(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::qt03)
{
    ui->setupUi(this);
   // setWindowFlags(Qt::Window|Qt::FramelessWindowHint);
    QPixmap mymap(":/image/image/robot");
    setWindowIcon(mymap);
    connect(ui->start_robot,SIGNAL(clicked()),this,SLOT(on_start_robot_clicked()));
    connect(ui->send_robot,SIGNAL(clicked()),this,SLOT(on_send_robot_clicked()));
    connect(ui->send_home,SIGNAL(clicked()),this,SLOT(on_send_home_clicked()));

}

qt03::~qt03()
{
    delete ui;
}


void qt03::on_start_robot_clicked()
{
    QString prog1="roslaunch";
    QStringList arg1;
    arg1<<"usb_cam"<<"usb_cam-test.launch";
    QProcess *proc1=new QProcess;
    proc1->start(prog1,arg1);


}

void qt03::on_send_robot_clicked()
{
    QString prog2="rosrun";
    QStringList arg2;
    arg2<<"rviz"<<"rviz";
    QProcess *proc2=new QProcess;
    proc2->start(prog2,arg2);
}

void qt03::on_send_home_clicked()
{
    QString prog3="rosrun";
    QStringList arg3;
    arg3<<"rviz"<<"rviz";
    QProcess *proc3=new QProcess;
    proc3->start(prog3,arg3);
}

感谢燕大的赵大神的鼎力相助啊,哈哈。这个就实用多了,。想当初真是很崇拜RGB-DSLAM的作者,能够吧点云拼接的东西集成到QT的界面,有空真的应该读一读源码,然后顺便做一个出来。
我找了个不错的界面:展示一下:

这里写图片描述

2017-08-17-补充:
通过运行一个ros的节点,能够弹出一个QT的界面。
参看roswiki上的链接:
http://wiki.ros.org/qt_create/Tutorials/Qt%20App%20Templates
http://wiki.ros.org/qt_create

将这个包放到你的工作区间当中

git clone https://github.com/stonier/qt_ros.git

编译之后,就可以
http://blog.csdn.net/zhangrelay/article/details/52245159
记得要source一下工作区间,不然不出不来这个catkin_create_qt_pkg

这个里面是有一些源码的。你可以通过这个里面的源码来进行学习。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值