分类: LINUX
2010-11-24 11:01:27
Qt事件处理及绘图
Qt事件处理函数的原理
Qt常用事件处理函数的使用
什么是事件:事件由窗口系统或Qt自身产生的。用以响应各种行为或情况。
事件处理过程:
1、在Qt内部,Qt通过QApplication::exec()启动的主事件循环不停的抓取事件队列的事件。
2、然后将事件转换成对应的QEvent对象
3、通过调用QObject类的event()函数将这个事件类型调用相应的事件处理器如:mounsePressEcevnt();keyPressEvent();painEvent()等;
代码实现:
void Mmouse::mousePressEvent(QMouseEvent *e)
{
QString str = "";
qDebug()<<"in mousePressEvent";
switch (e->button())
{
case Qt::LeftButton:
str = "LeftButoon Pressed!";
break;
case Qt::RightButton:
str ="RightButoon Pressed!";
break;
case Qt::MidButton:
str = "MidButoon Pressed!";
break;
default : break;
//ui->label->setText(QString::number(e->x()));
}
str += "("+QString::number(e->x())+
","+QString::number(e->y())+")";
ui->label->setText(str+"("+QString::number(e->globalX())
+","+QString::number(e->globalY())+")");
//ui->label->setText(str);
}
实现方法:
通过虚函数的机制使我们可以让事件处理时调用到自定义的事件函数;
重新实现这些事件函数。
实现函数要遵守虚函数的语法规则,自定义的类中保证函数名、参数的一致性。
事件与信号的区别:
实现文件中:
switch(event->key())
case Qt::Key_Left:
.............
break;
switch(event->modifiers())
..............
break;
通过调用参数对象获取键值包括修饰键,然后和宏定义的键值做比较得出实际的键值。
void resieEvent(QResizeEvent *event)
当主窗口大小发生变化时被调用;
在头文件中按上面形式声明;
实现文件中:
event->size(); 变化后的窗口大小
event->oldsize(); 变化后的窗口大小
void paintEvent(QPaintEvent *event)
当窗口被绘制时被调用
在头文件中按上面形式声明;
实现文件中:
event->rect() 得到需要重新绘制的区域
通过QPainter 绘制各种图形
QPainter painter(this) 创建对象
QPainter.setPen(); 设置画笔
painter.setBrush() 设置画刷
patiner.drawPixmap(); 画图
绘制的内容以背景的形式出现在窗口中
可以通过update()产生paintEvent事件
QPainter类常用函数
drawEllipse() 画椭圆
drawRect() 画圆
drawLIne() 画线
drawPicture() 画图片
drawImage() 画图片
drawPixmap() 画图片
drawText() 绘文本
QPainter类常用函数
setBrush() 设置画刷
setPen() 设置画笔
setFont()设置字体
注意点:
QPainter 必须要放在paintEvent()里,否则会初始化失败