• Qt编程,事件过滤器、绘图


    3 事件过滤器

           1) 安装事件过滤器

                  le->installEventFilter(this);  //从QObject继承出来的对象,可以注册一个事件过滤器,所有的事件先交给事件过滤器处理

           2) 重写事件过滤器

           /*

           参数:

                  watched: 对象

                  event: 事件

           返回值:

                  true: 事件已处理

                  false: 事件未处理

           */

           bool Widget::eventFilter(QObject *watched, QEvent *event)

           {

                  if (event->type() == QEvent::KeyPress)

                  {

                         //通过watched判断是否是关注的对象产生了事件

                         //通过event判断是否是关注的事件产生了

                         //如果是想要关注的对象产生了想要关注的事件则进行处理,处理完毕返回true

    1.  QKeyEvent *keyEvent = static_cast(event);
    2.     if (keyEvent->key() >= Qt::Key_0 && keyEvent->key() <= Qt::Key_9)
    3.    {
    4. qDebug() << (char)(keyEvent->key());
    5.       QString tmp = ui->te2->toPlainText();
    6.      tmp += QString(QChar(keyEvent->key()));
    7.       ui->te2->setText(tmp);
    8.      return true;//返回true意味这事件处理完毕,这个事件不会再继续处理
    9.             }
    10.     } 

                  //对于不关心的事件,记得最后要调用基类的事件处理函数,维持原本的行为

                  //让基类按照常规处理,一定要加上

                  return QWidget::eventFilter(watched, event);

           }     

    2、绘图

           void Widget::paintEvent(QPaintEvent *event);

           update() --- 手动刷新,界面重绘,触发paintEvent事件,可以配合定时器事件timerEvent一起使用

          

           QPainter: //画家

           QPen: //笔

           QBrush: //刷子

        QPainter p(this);//set this 表示设置主窗口为画布

        QPen pen(QColor(0, 0, 255));

        pen.setWidth(3);

        pen.setStyle(Qt::DashLine);

        p.setPen(pen); //设置画笔

          

        QBrush brush(QColor(255, 0, 0));

        brush.setStyle(Qt::Dense3Pattern);

        p.setBrush(brush); //设置画刷

        p.drawLine(0, 0, 100, 100);//画线

        p.drawRect(100, 100, 200, 100);  //画矩形

        p.drawEllipse(QPoint(300, 300), 100, 50); //画椭圆

        p.drawEllipse(QPoint(450, 300), 100, 100); //画圆

        p.drawPixmap(xPos++*50, 400, QPixmap(":/pic/luffy.png")); //画图片

        p.translate(width()/2, height()/2); //将画家的坐标系的原点移动到主窗口的中心点位置

        p.drawEllipse(QPoint(0, 0), 150, 150);

        p.save(); //保存当前的画家的坐标系

        //画秒针

        p.rotate(6); //将画家的坐标系顺时针旋转6°

        p.drawLine(QPoint(0, 0), QPoint(0, -100));

        p.restore();     //恢复之前保存的画家的坐标系

  • 相关阅读:
    医院空调冷热源设计方案VR元宇宙模拟演练的独特之处
    【python手写算法】正则化在线性回归和逻辑回归中的应用
    【数组】多数元素 摩尔投票法
    Java架构师分布式搜索数据迁移
    《洛谷深入浅出基础篇》P1551亲戚——集合——并查集P1551亲戚
    在Qt中使用SQLite数据库
    服务器选择多大的带宽比较合适,如果遇到攻击了该怎么办
    滚动条设置
    【Mongodb-01】Mongodb亿级数据性能测试和压测
    Nginx性能优化
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/133797347