二、事件机制和绘制#

1. Qt的事件机制#

事件是由系统或者Qt应用程序本身在不同的时刻发出的。

当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。

事件处理函数

1
2
3
4
5
6
keyPressEvent():键盘按键按下事件
keyReleaseEvent():键盘按键松开事件
mouseDoubleClickEvent():鼠标双击事件
mouseMoveEvent():鼠标移动事件
mousePressEvent():鼠标按压事件
mouseReleaseEvent():鼠标松开事件

下面演示键盘按下和松开事件

1
2
3
4
5
6
7
8
9
//键盘按下事件
void MainWindow::keyPressEvent(QKeyEvent *event){
    qDebug()<<"按压了键盘"<<endl;
}

//松开事件
void MainWindow::keyReleaseEvent(QKeyEvent *event){
    qDebug()<<"松开键盘"<<endl;
}

2. 绘制#

除了系统定义好的控件之外,我们还可以在控件中绘制文字、图片以及不规则的几何图形到控件中

可以在paintEvent方法中通过QPainter进行绘制

1、绘制直线

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
//绘制事件
void MainWindow::paintEvent(QPaintEvent *event){
    //创建画家
    QPainter *painter = new QPainter(this);
    //画笔
    QPen *p = new QPen(QColor(Qt::GlobalColor::red));
    //替换画笔
    painter->setPen(*p);

    //绘制直线
    painter->drawLine(100,100,200,200);

}

2、绘制文字

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//绘制事件
void MainWindow::paintEvent(QPaintEvent *event){
    //创建画家
    QPainter *painter = new QPainter(this);
    //画笔
    QPen *p = new QPen(QColor(Qt::GlobalColor::red));
    //替换画笔
    painter->setPen(*p);

    //绘制文字
    painter->drawText(300,300,"中国");
}

3、绘制矩形

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//绘制事件
void MainWindow::paintEvent(QPaintEvent *event){
    //创建画家
    QPainter *painter = new QPainter(this);
    //画笔
    QPen *p = new QPen(QColor(Qt::GlobalColor::red));
    //替换画笔
    painter->setPen(*p);

    //绘制矩形
    painter->drawRect(50,50,200,200)
}

4、绘制扇形

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
//绘制事件
void MainWindow::paintEvent(QPaintEvent *event){
    //创建画家
    QPainter *painter = new QPainter(this);
    //画笔
    QPen *p = new QPen(QColor(Qt::GlobalColor::red));
    //替换画笔
    painter->setPen(*p);

    //绘制扇形
    /**
     * 参数1:矩形左上角x
     * 参数2:矩形左上角y
     * 参数3:矩形宽度
     * 参数4:矩形高度
     * 参数5:扇形开始角度
     * 参数6:扇形扫过的角度
     */
    painter->drawArc(300,300,100,100,0,30*16);
}

5、绘制圆形

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//绘制事件
void MainWindow::paintEvent(QPaintEvent *event){
    //创建画家
    QPainter *painter = new QPainter(this);
    //画笔
    QPen *p = new QPen(QColor(Qt::GlobalColor::red));
    //替换画笔
    painter->setPen(*p);

    //绘制圆形
    painter->drawEllipse(200,200,100,100);
}

6、绘制多边形

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//绘制事件
void MainWindow::paintEvent(QPaintEvent *event){
    //创建画家
    QPainter *painter = new QPainter(this);
    //画笔
    QPen *p = new QPen(QColor(Qt::GlobalColor::red));
    //替换画笔
    painter->setPen(*p);

    QPoint point1(100,100);
    QPoint point2(100,150);
    QPoint point3(150,100);
    QPoint point4(150,200);
    QPoint point5(100,100);

    QPoint arr[] = {point1,point2,point3,point4,point5};
    //绘制多边形
    painter->drawConvexPolygon(arr,4);
}