主程序入口:

#include <iostream>
#include <QApplication>
#include "MainWindow.h"
int main(int argc,char *argv[]) {
//创建程序
QApplication app(argc,argv);
//创建窗口
MainWindow w;
//显示窗口
w.show();
return QApplication::exec();
}

MainWindow.cpp代码:

//
// Created by wt on 2020/6/5.
// #include "MainWindow.h" MainWindow::MainWindow(QWidget* parent):QWidget(parent) {
//初始化界面
initUI();
//设置回调
setCallBack();
//处理信号和槽
this->bindSignalAndSlot();
} void MainWindow::initUI() {
setFixedSize(600, 800);
//布局
QFormLayout *layout = new QFormLayout;
//ip输入框
ipEdit = new QLineEdit("192.168.36.23");
//端口输入框
portEdit = new QLineEdit("30003"); //连接状态
statusLabel = new QLabel("未连接"); //连接机械臂按钮
connectBtn = new QPushButton("连接机械臂");
disConnectBtn = new QPushButton("断开连接"); //movej的每一个关节输入
joint1Edit = new QLineEdit("-144.98");
joint2Edit = new QLineEdit("-97.67");
joint3Edit = new QLineEdit("-102.98");
joint4Edit = new QLineEdit("-68.95");
joint5Edit = new QLineEdit("83.07");
joint6Edit = new QLineEdit("58.15"); //movej
movejBtn = new QPushButton("moveJ"); //movel输入
xEdit = new QLineEdit("0.99");
yEdit = new QLineEdit("-355.35");
zEdit = new QLineEdit("191.15");
rxEdit = new QLineEdit("2.8321");
ryEdit = new QLineEdit("1.1774");
rzEdit = new QLineEdit("-0.0290"); //movel
movelBtn = new QPushButton("moveL"); //添加
layout->addRow("ip", ipEdit);
layout->addRow("port", portEdit);
layout->addRow("连接状态", statusLabel);
layout->addRow("", connectBtn);
layout->addRow("", disConnectBtn); layout->addRow("关节1:", joint1Edit);
layout->addRow("关节2:", joint2Edit);
layout->addRow("关节3:", joint3Edit);
layout->addRow("关节4:", joint4Edit);
layout->addRow("关节5:", joint5Edit);
layout->addRow("关节6:", joint6Edit); layout->addRow("", movejBtn); layout->addRow("x:", xEdit);
layout->addRow("y:", yEdit);
layout->addRow("z:", zEdit);
layout->addRow("rx:", rxEdit);
layout->addRow("ry:", ryEdit);
layout->addRow("rz:", rzEdit); layout->addRow("", movelBtn); //设置布局
setLayout(layout);
} MainWindow::~MainWindow() { } void MainWindow::bindSignalAndSlot() {
//连接和断开连接
connect(connectBtn,&QPushButton::clicked,[this]{
QString ip = ipEdit->text();
int port = portEdit->text().toInt();
URDriver::getInstance()->connectToRobot(ip,port);
});
connect(disConnectBtn,&QPushButton::clicked,[this]{
URDriver::getInstance()->disConnectToRobot();
});
//movej
connect(movejBtn,&QPushButton::clicked,this,&MainWindow::movej);
//movel
connect(movelBtn,&QPushButton::clicked,this,&MainWindow::movel);
} void MainWindow::setCallBack() {
//连接回调
URDriver::getInstance()->setConnectCallback([this]{
//更新界面
this->statusLabel->setText("已连接");
});
URDriver::getInstance()->setDisConnectCallback([this]{
//更新界面
this->statusLabel->setText("断开连接");
});
} void MainWindow::movej() {
//获取留个关节角度(转换弧度值)PI 180
double joint1 = joint1Edit->text().toDouble()*DEGREEETORA;
double joint2 = joint2Edit->text().toDouble()*DEGREEETORA;
double joint3 = joint3Edit->text().toDouble()*DEGREEETORA;
double joint4 = joint4Edit->text().toDouble()*DEGREEETORA;
double joint5 = joint5Edit->text().toDouble()*DEGREEETORA;
double joint6 = joint6Edit->text().toDouble()*DEGREEETORA;
//保存6个关节角度
double joints[6]{joint1,joint2,joint3,joint4,joint5,joint6};
//movej移动
URDriver::getInstance()->movej(joints);
} void MainWindow::movel() {
//位置和姿态
double x = xEdit->text().toDouble()/1000;
double y = yEdit->text().toDouble()/1000;
double z = zEdit->text().toDouble()/1000;
double rx = rxEdit->text().toDouble();
double ry = ryEdit->text().toDouble();
double rz = rzEdit->text().toDouble();
//保存位置和姿态
double pos[6]{x,y,z,rx,ry,rz};
URDriver::getInstance()->movel(pos);
}

MainWindow.h代码:

//
// Created by wt on 2020/6/5.
// #ifndef URDRIVER_MAINWINDOW_H
#define URDRIVER_MAINWINDOW_H
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include <QFormLayout>
#include <iostream>
#include <URDriver.h>
#include <QString>
#include <math.h>
using namespace std; class MainWindow: public QWidget {
private:
//角度转弧度
double DEGREEETORA = M_PI/180;
//ip输入框
QLineEdit *ipEdit;
//端口输入框
QLineEdit *portEdit; //连接状态
QLabel *statusLabel; //连接机械臂按钮
QPushButton *connectBtn;
QPushButton *disConnectBtn; //movej的每一个关节输入
QLineEdit *joint1Edit;
QLineEdit *joint2Edit;
QLineEdit *joint3Edit;
QLineEdit *joint4Edit;
QLineEdit *joint5Edit;
QLineEdit *joint6Edit; //movej
QPushButton *movejBtn; //movel输入
QLineEdit *xEdit;
QLineEdit *yEdit;
QLineEdit *zEdit;
QLineEdit *rxEdit;
QLineEdit *ryEdit;
QLineEdit *rzEdit; //movel
QPushButton *movelBtn; public:
explicit MainWindow(QWidget* parent = Q_NULLPTR); ~MainWindow() override;
//初始化ui界面
void initUI();
//绑定信号和槽
void bindSignalAndSlot();
//设置回调
void setCallBack();
void movej();
//movej移动
//movel移动
void movel();
}; #endif //URDRIVER_MAINWINDOW_H

qt(二)的更多相关文章

  1. Qt 二维码

    1.生成二维码 利用第三方库qrencode ,将qrencode源码添加到自己的程序中,直接调用使用. 参考http://blog.csdn.net/zhangxufei/article/detai ...

  2. qt二维码示例

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38679621,qq:1269122125. 移动终 ...

  3. QT 二维图形 原理、发展及应用

    转载自 网易博客:sun的博客 http://zhouyang340.blog.163.com/blog/static/3024095920126710504178/ 2D绘图 Qt4中的2D绘图部分 ...

  4. 用Qt写软件系列三:一个简单的系统工具之界面美化

    前言 在上一篇中,我们基本上完成了主要功能的实现,剩下的一些导出.进程子模块信息等功能,留到后面再来慢慢实现.这一篇来讲述如何对主界面进行个性化的定制.Qt库提供的只是最基本的组件功能,使用这些组件开 ...

  5. QT的初步学习笔记

    一.Qt简介 1.Qt是什么:图形用户界面程序框架  能做界面的还有什么:MFC.GTK+ 2.Qt的由来和发展 3.为什么选择Qt 二.Qt环境与工具 1.工具   a.Qt助手:里面详细说明了Qt ...

  6. Qt安装教程

    一.Qt下载 官网下载链接http://download.qt.io/archive/qt/,下载最新版 5.10 官网的下载网站有的时候可能会抽风,也可以选择国内的镜像下载源http://mirro ...

  7. QT显示框架嵌入Vs控制台工程

      一.一些准备工作: 1.安装Qt for VS 的插件: 安装Qt for VS 的插件 下载地址:http://download.qt.io/official_releases/vsaddin/ ...

  8. Qt之模型/视图(自定义风格)

    Qt之模型/视图(自定义风格) 关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下. 先看下图: 先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风 ...

  9. Qt5.7学习

    一 Qt简介(Build your world with Qt) 二 Qt5.7.0的安装 三 Qt系统构造库及常用类 四 信号(signal)与槽(slot)通信机制 五 QtDesigner开发工 ...

  10. APScheduler轻量级定时任务框架

    目录 一.APScheduler简介 支持的后端存储作业 集成的Python框架 二.APScheduler下载安装 三.APScheduler组件 各组件简介 调度器 作业存储器 执行器 触发器 四 ...

随机推荐

  1. python内置re模块全面实战

    目录 一:取消转义 二:python内置模块之re模块 三:常用方法 findall search match 简便 四:常用方法 finditer 匹配文件多情况 五:切割 替换 内置模块 六:分组 ...

  2. Asp-Net-Core学习笔记:身份认证入门

    前言 过年前我又来更新了~ 我就说了最近不是在偷懒吧,其实这段时间还是有积累一些东西的,不过还没去整理-- 所以只能发以前没写完的一些笔记出来 就当做是温习一下啦 PS:之前说的红包封面我还没搞,得抓 ...

  3. JAVA多线程学习七-线程池

    为什么用线程池 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3> ...

  4. ansible学习(一)

    基础概念 ansible是什么? 它是一个"配置管理工具",它是一个"自动化运维工具",如果你没有使用过任何配置管理工具,不要害怕,看完这篇文章,你自然会对an ...

  5. 修复 WordPress 通过邮箱 找回密码时的链接无效&新用户注册时提示的链接无效

    感谢大佬:https://blog.csdn.net/xiaobinqt/article/details/83055058 感谢大佬:https://www.wpdaxue.com/lost-pass ...

  6. 【转】python导出依赖库

    原文链接:https://www.cnblogs.com/ceshixuexi/p/8283372.html 在Python开发的过程中,经常会遇到各种各样的小问题,比如在一台计算机上调试好的程序,迁 ...

  7. 一行代码为UITextField添加收键盘功能

    iOS开发中收键盘是十分常用的功能,只需一行代码即可为ViewController添加工具条收键盘功能 更重要的是使用catogory,无代码污染. 代码 // UITextField+keyboar ...

  8. Throwable以及错误

    /* 异常的体系: ----------| Throwable 所以异常或者错误类的超类 --------------|Error 错误 错误一般是用于jvm或者是硬件引发的问题,所以我们一般不会通过 ...

  9. MySQL-MMM高可用架构

    MySQL-MMM高可用架构 目录 MySQL-MMM高可用架构 一.MMM 1. MMM的概述 2. MMM的应用场景 3. MMM的特点 4. 关于MMM高可用架构的说明 5. 用户及授权 二.案 ...

  10. 【HDU6687】Rikka with Stable Marriage(Trie树 贪心)

    题目链接 大意 给定\(A,B\)两个数组,让他们进行匹配. 我们称\(A_i\)与\(B_j\)的匹配是稳定的,当且仅当目前所剩元素不存在\(A_x\)或\(B_y\)使得 \(A_i\oplus ...