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

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

再在下面的主函数里添加

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

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

添加#include 头文件。因为这样就包含了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”));

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

//也可以将图片放到工程文件夹得debug文件夹下,这样用相对路径”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.j pg”));

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

//更改标签图片和大小

}

}

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

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

效果如下。

按下鼠标的一个键,并移动鼠标。

按下键盘上的A键。

分类:Qt系列教程作者: yafeilinux 日期:四月 30th, 2010. 504 views Tags: creator, qt, yafeilinux, 教程

5 条评论在“九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针”

1.Me.说:

2010年05月22日于11:02 上午

学习完毕:)

2.y84161838说:

2010年05月16日于12:13 下午

学习完毕,

3.yafeilinux说:

2010年05月3日于11:05 下午

你更改一下它的alignment属性就行了

4.颖涵说:

2010年05月3日于8:53 下午

想问个问题

现在您写的程序执行后在按“A”键后在LABEL中输出的图片是顶着左边显示的如果换一张其他的图片的话可能出现图片显示不全的情况

即使是在使用了LAY OUT IN A GRID的情况下能解决图像显示不全的问题但是显示的图片也是靠左的

不知道是否有办法让显示的图片居中呢?

谢谢

5.yangyang说:

2010年05月3日于8:16 上午

学习完毕谢谢!

相关文档
最新文档