qt(二)
主程序入口:
#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(二)的更多相关文章
- Qt 二维码
1.生成二维码 利用第三方库qrencode ,将qrencode源码添加到自己的程序中,直接调用使用. 参考http://blog.csdn.net/zhangxufei/article/detai ...
- qt二维码示例
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38679621,qq:1269122125. 移动终 ...
- QT 二维图形 原理、发展及应用
转载自 网易博客:sun的博客 http://zhouyang340.blog.163.com/blog/static/3024095920126710504178/ 2D绘图 Qt4中的2D绘图部分 ...
- 用Qt写软件系列三:一个简单的系统工具之界面美化
前言 在上一篇中,我们基本上完成了主要功能的实现,剩下的一些导出.进程子模块信息等功能,留到后面再来慢慢实现.这一篇来讲述如何对主界面进行个性化的定制.Qt库提供的只是最基本的组件功能,使用这些组件开 ...
- QT的初步学习笔记
一.Qt简介 1.Qt是什么:图形用户界面程序框架 能做界面的还有什么:MFC.GTK+ 2.Qt的由来和发展 3.为什么选择Qt 二.Qt环境与工具 1.工具 a.Qt助手:里面详细说明了Qt ...
- Qt安装教程
一.Qt下载 官网下载链接http://download.qt.io/archive/qt/,下载最新版 5.10 官网的下载网站有的时候可能会抽风,也可以选择国内的镜像下载源http://mirro ...
- QT显示框架嵌入Vs控制台工程
一.一些准备工作: 1.安装Qt for VS 的插件: 安装Qt for VS 的插件 下载地址:http://download.qt.io/official_releases/vsaddin/ ...
- Qt之模型/视图(自定义风格)
Qt之模型/视图(自定义风格) 关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下. 先看下图: 先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风 ...
- Qt5.7学习
一 Qt简介(Build your world with Qt) 二 Qt5.7.0的安装 三 Qt系统构造库及常用类 四 信号(signal)与槽(slot)通信机制 五 QtDesigner开发工 ...
- APScheduler轻量级定时任务框架
目录 一.APScheduler简介 支持的后端存储作业 集成的Python框架 二.APScheduler下载安装 三.APScheduler组件 各组件简介 调度器 作业存储器 执行器 触发器 四 ...
随机推荐
- springboot 添加mybatisjar包发生的异常问题?
一.pro.xml文件中,添加mybatisjar包 <?xml version="1.0" encoding="UTF-8"?> <proj ...
- 【第十三期】B站后端开发实习生一、二面经
写在最前:非科班渣硕去年转码一年,不是什么大佬,纯小白(go语言开发). 一面(大概70min) 首先是自我介绍.(比较传统,就是描述下自己的技术栈) 线程和进程的关系. 线程之间如何进行通信. 死锁 ...
- eclipse的web项目导入IDE报错
问题:eclipse的web项目导入IDE报错 第一个问题: 解决:点击enable即可 第二个问题: 解决: 解决方法: 切换文件的编码 : from UTF-8 to GBK to UTF-8 参 ...
- IntelliJ IDEA 官方网站 http://www.jetbrains.com/idea/
IntelliJ IDEA 官方网站 http://www.jetbrains.com/idea/
- 【ASP.NET Core】设置 Web API 响应数据的格式——FormatFilter特性篇
在上一篇烂文中老周已向各位介绍过 Produces 特性的使用,本文老周将介绍另一个特性类:FormatFilterAttribute. 这个特性算得上是筛选器的马甲,除了从 Attribute 类派 ...
- JavaScript中this的绑定规则
JavaScript中this的绑定规则 前言 我们知道浏览器运行环境下在全局作用域下的this是指向window的,但是开发中却很少在全局作用域下去使用this,通常都是在函数中进行使用,而函数使用 ...
- Struts2跟SpringMVC的区别
1. 拦截机制不同 Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter ...
- python官网导航翻译
- C++ 实现 Parsec
前一段时间看到了梨梨喵聚聚写的Parser Combinator 在 C++ 里的 DSL, 感觉好厉害, 正好毕设里要写一部分前端, 昨天又把这篇文章看了一遍, 想着我也要用这么酷炫的东西来参与一下 ...
- Diary -「PKUSC 2021」游记
出游回来自然而然(?)地进入生产低谷的兔子只能写写游记了 qwq. Day -1 实时反馈赛制不是为防止你被数据调戏,而是给你调戏数据的机会. --鲁迅 PKU 一贯的 \(32\) 发提交实 ...