Qt-画图、鼠标事件

这篇博客详细介绍了Qt框架中针对鼠标事件的处理,包括鼠标按下、释放、移动和双击事件的响应。同时,展示了如何利用QPainter进行图形绘制,如虚线、矩形、椭圆和自定义图形。通过对不同按钮和坐标位置的检测,实现丰富的用户交互。此外,还提到了如何结合按钮事件更新图形并刷新界面。
摘要由CSDN通过智能技术生成

鼠标事件

//头文件
#include<QMouseEvent>


void Widget::mousePressEvent(QMouseEvent *event)
{
    //Qt::LeftButton    0x00000001
    //Qt::RightButton   0x00000002
    //Qt::MidButton     0x00000004

    //左键按下,返回1,右键按下返回2,中间按下返回4
    qDebug()<<event->button()<<endl;
    if(event->button()==1)
    {
        qDebug()<<"左键按下"<<endl;
    }
    else if(event->button()==2)
    {
        qDebug()<<"右键按下"<<endl;
    }
    else if(event->button()==4)
    {
        qDebug()<<"中键按下"<<endl;
    }
    qDebug()<<"鼠标按下去-"<<"全局位置:"<<event->globalPos()<<endl;
    qDebug()<<"鼠标按下去-"<<"局部位置:"<<event->localPos()<<endl;
    qDebug()<<"鼠标按下去-"<<"win位置:"<<event->windowPos()<<endl;
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    qDebug()<<"鼠标弹上来-"<<"全局位置:"<<event->globalPos()<<endl;
    qDebug()<<"鼠标弹上来-"<<"局部位置:"<<event->localPos()<<endl;
    qDebug()<<"鼠标弹上来-"<<"win位置:"<<event->windowPos()<<endl;
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    //移动是指,在鼠标按下去的时候,实时显示移动的位置
    qDebug()<<"鼠标移动-"<<"全局位置:"<<event->globalPos()<<endl;
    qDebug()<<"鼠标移动-"<<"局部位置:"<<event->localPos()<<endl;
    qDebug()<<"鼠标移动-"<<"win位置:"<<event->windowPos()<<endl;
}
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    qDebug()<<"鼠标双击-"<<"全局位置:"<<event->globalPos()<<endl;
    qDebug()<<"鼠标双击-"<<"局部位置:"<<event->localPos()<<endl;
    qDebug()<<"鼠标双击-"<<"win位置:"<<event->windowPos()<<endl;
}

画图事件

//画图事件
#include<QPainter>



void Widget::paintEvent(QPaintEvent *)
{
    //使用图片作背景
    QPainter painter(this);//在当前窗体画
    painter.drawPixmap(0,0,this->width(),this->height(),QPixmap("../mouse_event/02.png"));


    //用画笔画背景1
    ///该效果为:从(0,0)点到该窗口的右下角画一条虚线
    QPen pen1;
    pen1.setStyle(Qt::DashLine);
    pen1.setColor(Qt::red);
    pen1.setWidth(3);
    painter.setPen(pen1);
    painter.drawLine(QPointF(0,0),QPointF(this->width(),this->height()));

	//用画笔画背景2
    ///该效果1为:以(100,100)为起点到(500,500)为终点画一个矩形
    ///效果2为:以窗口的中心位置为圆心,以50为x轴方向的半径,以300为y轴方向的半径画椭圆
    QPen pen2;
    pen2.setStyle(Qt::SolidLine);
    pen2.setColor(Qt::yellow);
    pen2.setWidth(5);
    painter.setPen(pen2);
    painter.drawRect(100,100,800,800);//起点(100,100),终点(500,500)
    //rx:沿x轴方向的长度;ry:沿y轴方向的长度
    painter.drawEllipse(QPoint(this->width()/2,this->height()/2),50,300);


	//用画刷画背景
    ///该效果1为:以图片填充的方式,使用画刷画一个椭圆
    QBrush brush1;
    brush1.setStyle(Qt::TexturePattern);
    brush1.setTexture(QPixmap("../mouse_event/02.png"));
    //brush1.setStyle(Qt::CrossPattern);
    //brush1.setColor("#0000aa");
    painter.setBrush(brush1);
    painter.drawEllipse(QPoint(this->width()/2,this->height()/2),700,300);

    ///该效果2为:使用4个点画一个封闭的图形
    QPointF points[4] = {
          QPointF(10.0, 80.0),
          QPointF(20.0, 10.0),
          QPointF(80.0, 30.0),
          QPointF(90.0, 70.0)
      };

    painter.drawPolygon(points,4);

}



///可添加一些按钮事件,随着按钮的点击更新点的位置
///更新点位置后,需要对页面进行刷新
///this->update();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

colorful_stars

您是我见过全宇宙最可爱的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值