原创 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针(原创)

2009-11-8 21:35 5374 1 1 分类: MCU/ 嵌入式

我们前面一直在说信号,比方说用鼠标按了一下按钮,这样就会产生一个按钮的单击信号,然后我们可以在相应的槽函数里进行相应功能的设置。其实在按下鼠标后,程序要先接收到鼠标按下的事件,然后将这个事件按默认的设置传给按钮。可以看出,事件和信号并不是一回事,事件比信号更底层。而我们以前把单击按钮也叫做事件,这是不确切的,不过大家都知道是什么意思,所以当时也没有细分。


Qt中的事件可以在QEvent中查看。下面我们只是找两个例子来进行简单的演示。


1.还是先建立一个Qt4 Gui Application工程,我这里起名为event。


2.添加代码,让程序中可以使用中文。


即在main.cpp文件中加入#include <QTextCodec>的头文件包含。


再在下面的主函数里添加QTextCodec::setCodecForTr(QTextCodec::codecForLocale());


3.在mainwindow.h文件中做一下更改。


添加#include <QtGui>头文件。因为这样就包含了QtGui中所有的子文件。


在public中添加两个函数的声明


void mouseMoveEvent(QMouseEvent *);

void keyPressEvent(QKeyEvent *);

4.我们在mainwindow.ui中添加一个Label和一个PushButton,将他们拉长点,因为一会要在上面显示标语。


5.在mainwindow.cpp中的构造函数里添加两个部件的显示文本。


ui->label->setText(tr("按下键盘上的A键试试!"));


ui->pushButton->setText(tr("按下鼠标的一个键,然后移动鼠标试试"));


6.然后在下面进行两个函数的定义。


/*以下是鼠标移动事件*/


void MainWindow::mouseMoveEvent(QMouseEvent *m)


{//这里的函数名和参数不能更改


QCursor my(QPixmap("E:/Qt/Qt-Creator-Example/event/time.png"));


//为鼠标指针选择图片,注意这里要用绝对路径,且要用“/”,而不能用“\”


QApplication::setOverrideCursor(my);


//将鼠标指针更改为自己设置的图片


int x = m->pos().x();


int y = m->pos().y();


//获取鼠标现在的位置坐标


ui->pushButton->setText(tr("鼠标现在的坐标是(%1,%2), 哈哈好玩吧").arg(x).arg(y));


//将鼠标的位置坐标显示在按钮上


ui->pushButton->move(m->pos());


//让按钮跟随鼠标移动


}


/*以下是键盘按下事件*/


void MainWindow::keyPressEvent(QKeyEvent *k)


{


if(k->key() == Qt::Key_A) //判断是否是A键按下


{


ui->label->setPixmap(QPixmap("E:/Qt/Qt-Creator-Example/event/linux.jpg"));


ui->label->resize(100,100);


//更改标签图片和大小


}


}


注意:这两个函数不是自己新建的,而是对已有函数的重定义,所有函数名和参数都不能改。第一个函数对鼠标移动事件进行了重写。其中实现了鼠标指针的更改,和按钮跟随鼠标移动的功能。


第二个函数对键盘的A键按下实现了新的功能。


效果如下。到我的博客http://hi.baidu.com/yafeilinux/blog/item/c6e878098706823ae8248876.html查看带图片的原文。

文章评论0条评论)

登录后参与讨论
相关推荐阅读
用户395791 2011-02-21 10:10
单片机实现贪吃蛇游戏
本文章原创于 www.yafeilinux.com  作者:雨?烟?, 转载请注明出处。最近忙完英语考试了,感觉轻松许多。手痒的很,想写点程序,在玩弄手机时看见自己的手机游戏里连个贪吃蛇都没有呢…为什...
用户395791 2011-02-13 16:20
Qt 的未来
2011年的春节刚过,当我们还不愿意从过年的懒散生活中清醒过来时,一则无法设想的新闻将我们惊醒!   一、事件突发: 1.北京时间2月11日下午消息,诺基亚与微软刚刚宣布,双方计划建立广泛的战略伙伴关...
用户395791 2010-07-17 13:37
Qt串口通信专题教程
本文章原创于www.yafeilinux.com 转载请注明出处。Qt串口通信专题教程前言去年我使用Qt编写串口通信程序时,将自己的学习过程写成了教程(Qt编写串口通信程序全程图文讲解),但是由于时间...
用户395791 2010-06-16 22:32
Led非典型应用——感测外部光线
本文章原创于 www.yafeilinux.com  作者:Jay , 转载请注明出处。基本上初学者学习任何一款单片机都会写同样的一个程序——Led流水灯。就像初学C、C++、Qt之类的语言时都要写“...
用户395791 2010-05-27 18:47
Qt Creator系列教程
Qt Creator系列教程        为了使更多的Qt初学者能尽快入门Qt,也为了Qt及Qt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语...
用户395791 2010-03-26 17:51
二十七、Qt数据库(七)QSqlRelationalTableModel(原创)
声明:本文原创于yafeilinux的百度博客,http://hi.baidu.com/yafeilinux 转载请注明出处。讲完QSqlTableModel了,我们这次讲这个类的扩展类QSqlRel...
EE直播间
更多
我要评论
0
1
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /3 下一条