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

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

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

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

              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();     //恢复之前保存的画家的坐标系

你可能感兴趣的:(qt,开发语言)