二、事件机制和绘制
1. Qt的事件机制
事件是由系统或者Qt应用程序本身在不同的时刻发出的。
当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。
事件处理函数
| keyPressEvent():键盘按键按下事件
keyReleaseEvent():键盘按键松开事件
mouseDoubleClickEvent():鼠标双击事件
mouseMoveEvent():鼠标移动事件
mousePressEvent():鼠标按压事件
mouseReleaseEvent():鼠标松开事件
|
下面演示键盘按下和松开事件
| //键盘按下事件
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);
}
|