Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365576
  • 博文数量: 36
  • 博客积分: 2071
  • 博客等级: 大尉
  • 技术积分: 797
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-20 12:08
文章分类
文章存档

2011年(2)

2010年(34)

我的朋友

分类: 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);
}

实现方法:

通过虚函数的机制使我们可以让事件处理时调用到自定义的事件函数;

重新实现这些事件函数。

实现函数要遵守虚函数的语法规则,自定义的类中保证函数名、参数的一致性。

事件与信号的区别:

 

QT常用事件处理函数的使用:

void mousePressEvent(QMouseEvent *event)

void mouseReleaseEvent(QMouseEvent *event)

void mouseMoveEvent(QMouseEvent *event)

在头文件中按上面形式声明:

实现文件中:

event->x() event->y()  得到点击坐标值

event->button()    哪个键被按下。

 

void wheelEvent(QWheelEvent *event)

在头文件中按上面形式声明;

实现文件中:

event->orientation()

 

event->delta()

通过调用参数对象相关函数,获取垂直或水平滚动,以及各自滚动方向。

 

void keyPessEvent(QkeyEvent * event)

 在头文件中按上面形式声明;

实现文件中:

switch(event->key())

case Qt::Key_Left:

.............

break;

switch(event->modifiers())

 case Qt::QtAitModifier:

..............

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()里,否则会初始化失败

 

阅读(6897) | 评论(0) | 转发(0) |
0

上一篇:SOCKET编程

下一篇:黑白棋游戏项目

给主人留下些什么吧!~~