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