Qt圆形等待界面绘制-1

一、效果图如下
在这里插入图片描述
二、效果图拆解
根据效果图,实际就是以控件中心为圆心,计算周边12个小圆的坐标,然后在绘制透明度逐渐增加的小圆,最后添加定时器,重新绘制小圆即可。
三、准备工作
①初始化窗口类,类继承自QDialog,设置窗口大小,去掉标题栏,任务栏,窗口置顶等,代码如下所示:

setFixedSize(150,150);
//去掉标题栏 设置置顶 去掉任务栏图标
setWindowFlags(Qt::FramelessWindowHint|Qt::Tool|Qt::WindowCloseButtonHint|Qt::WindowStaysOnTopHint);

②很重要的一点,设置窗口背景透明,如果不设置这个,窗口运行起来就是有一个白色背景,设置代码如下:

//设置窗口背景透明
setAttribute(Qt::WA_TranslucentBackground, true);

四、详细绘制过程
①重载QWidget的绘图函数paintEvent。初始化绘图的QPainter对象,启用反锯齿,将绘制中心移动到控件中心,代码如下所示:

QPainter painter(this);
//启动反锯齿
painter.setRenderHint(QPainter::Antialiasing, true);
int width=this->width();
int height=this->height();
//画笔移动到中间
painter.translate(width >> 1, height>> 1);

②计算12个小圆的位置,并且绘制小圆,代码如下所示:

//计算偏移坐标
int offsetDest=(width-30)/2;
painter.setPen(Qt::NoPen);
//计算小圆坐标
for(int i=0;i<12;++i){
    QPoint point(0,0);
    painter.setBrush(QColor(73,124,255));
    point.setX(offsetDest*qSin((i)*M_PI/6));
    point.setY(offsetDest*qCos((i)*M_PI/6));
    painter.drawEllipse(point.x()-10, point.y()-10, 20, 20);
}

此时没有加入定时器,所以图像不会动,而且没有设置小圆的透明度,所以12个小圆颜色一样,效果图如下:
在这里插入图片描述
③设置小圆的颜色渐变,只需要修改painter.setBrush(QColor(73,124,255));中的透明度即可,代码如下所示:

 painter.setBrush(QColor(73,124,255,255-i*30));

效果图如下所示:
在这里插入图片描述
④添加定时器,让小圆动起来,代码如下:

//在构造函数中启动定时器
startTimer(150);
//重写timerEvent函数,定期执行更新操作
void RingWait1::timerEvent(QTimerEvent*)
{
	++offset;
    if(offset>11)
        offset=0;
	update();
}

其中offset是int类型的,在头文件中定义,初始化为0即可。
最后在修改paintEvent函数中的for循环,代码如下所示:

for(int i=0;i<12;++i){
    QPoint point(0,0);
    painter.setBrush(QColor(73,124,255,255-i*30));
    point.setX(offsetDest*qSin((-offset+i)*M_PI/6));
    point.setY(offsetDest*qCos((-offset+i)*M_PI/6));
    painter.drawEllipse(point.x()-10, point.y()-10, 20, 20);
}

五、最后总结
①上面描述的是绘制的整个过程,源码中,可以根据自身需要设置不同的圆大小,颜色,顺时针/逆时针等,实现不同的效果。

六、代码获取
从Git下载,地址为:https://github.com/youyicc/RingWait1.git

要控制UR机器人运动,可以使用MATLAB中的Robotics System Toolbox。这个工具箱提供了许多函数和工具来帮助您创建,可视化和控制机器人。 以下是一个简单的例子,展示如何使用MATLAB控制UR机器人的运动。 1. 首先,您需要连接UR机器人和计算机。可以使用Ethernet或Wi-Fi连接,也可以使用USB连接。 2. 然后,您需要创建一个Robotics System Toolbox中的机器人对象。这个对象包含了机器人的几何结构,例如连杆和关节的长度和角度范围。 ```matlab robot = importrobot('ur5.urdf'); ``` 3. 接下来,您需要定义机器人的控制器。控制器可以是简单的PID控制器,也可以是更复杂的控制器,例如基于模型的控制器。在这个例子中,我们将使用简单的PID控制器。 ```matlab pid = pid(1, 0.1, 0.01); ``` 4. 然后,您需要定义机器人的起始位置和目标位置。 ```matlab startPos = [0 0 0 0 0 0]; endPos = [0.3 -0.2 0.4 0 0 0]; ``` 5. 接下来,您需要计算机器人的运动轨迹。可以使用Robotics System Toolbox中的trapezoidalVelocityProfile函数来计算机器人的速度和加速度。 ```matlab tVec = [0 2]; q0 = startPos; qf = endPos; [q,qd,qdd] = trapveltraj([tVec(1) tVec(end)],size(q0,2),'AccelTime',1,'EndTime',2,'Velocity',0.05); ``` 6. 最后,您可以使用Robotics System Toolbox中的control函数来控制机器人的运动。 ```matlab for i = 1:length(tVec) qdDesired = qd(i,:); qddDesired = qdd(i,:); qCurrent = robot.homeConfiguration; qCurrent.JointPosition = q(i,:); ik = inverseKinematics('RigidBodyTree',robot); [configSoln,solnInfo] = ik('tool0',trvec2tform([0 0 0.1])*eul2tform([0 pi/2 0]),[],qCurrent); vel = control(pid,configSoln.JointPosition,qCurrent.JointPosition,qdDesired',qddDesired'); qNext = qCurrent; qNext.JointPosition = qCurrent.JointPosition + vel'; show(robot,qNext); drawnow; end ``` 这个例子展示了如何使用MATLAB控制UR机器人的运动。当然,具体的控制方法和参数需要根据实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值