九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针
2010-04-06 12:27
471 查看
我们前面一直在说信号,比方说用鼠标按了一下按钮,这样就会产生一个按钮的单击信号,然后我们可以在相应的槽函数里进行相应功能的设置。其实在按下鼠标后,程序要先接收到鼠标按下的事件,然后将这个事件按默认的设置传给按钮。可以看出,事件和信号并不是一回事,事件比信号更底层。而我们以前把单击按钮也叫做事件,这是不确切的,不过大家都知道是什么意思,所以当时也没有细分。
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键按下实现了新的功能。
效果如下。
按下鼠标的一个键,并移动鼠标。
按下键盘上的A键。
[b]声明:本文原创于yafeilinux的百度博客:http://hi.baidu.com/yafeilinux[/b]
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键按下实现了新的功能。
效果如下。
按下鼠标的一个键,并移动鼠标。
按下键盘上的A键。
[b]声明:本文原创于yafeilinux的百度博客:http://hi.baidu.com/yafeilinux[/b]
相关文章推荐
- 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针
- Qt 学习(8)Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针(转)
- Qml实现对鼠标和键盘事件的简单处理
- 自学QT之QML实现响应鼠标和键盘事件
- tkinter 对键盘和鼠标事件的处理
- Python实现鼠标、键盘事件的记录
- C#winform处理鼠标和键盘事件
- JavaScript实现禁用键盘和鼠标的点击事件
- QT基础(二)----鼠标、键盘事件处理机制、信息拦截机制
- javascript 事件处理、鼠标拖动效果实现方法详解
- qt之键盘、鼠标事件处理
- asp.net2.0实现自定义Web处理类(迁移事件处理程序到SQL Server200中)
- Qt Quick鼠标事件处理、键盘、计时器
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- GridView的几个事件(如实现: 行的双击/单击/捕捉键盘按键/鼠标悬浮/移出效果)
- GridView的几个事件(如实现: 行的双击/单击/捕捉键盘按键/鼠标悬浮/移出效果)(示例代码下载)
- Qt学习之路——— Qt键盘、鼠标事件的处理
- Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)
- cocos2d-x window实现鼠标移动 键盘事件
- java编写程序实现键盘钢琴,运用键盘事件、鼠标事件