找回密码
 立即注册
收起左侧
楼主: yafeilinux

第9篇 基础(九)Qt键盘、鼠标事件的处理

42
回复
60971
查看
[复制链接]
累计签到:56 天
连续签到:1 天
2014-3-19 14:43:31 显示全部楼层
yafeilinux 发表于 2014-3-19 14:12
就是这个啊。

老师,你好,我已经用key_left,key_right,key_up,key_down试过了,但是没有触发pushButton的move(),我的上下左右键是正常的;
而用字母就可以实现,你知道是什么原因吗?谢谢!
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2014-3-22 10:09:14 显示全部楼层
侠隐 发表于 2014-3-19 14:43
老师,你好,我已经用key_left,key_right,key_up,key_down试过了,但是没有触发pushButton的move(),我的 ...

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setFocus();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{

    if(event->key() == Qt::Key_Up)
        ui->pushButton->move(50, 50);
}

这样写,首先要保证焦点在主窗口上,这样主窗口才会响应方向键。不然方向键默认是给按钮移动焦点的。

也可以使用事件过滤器试试。
回复 支持 反对

使用道具 举报

累计签到:56 天
连续签到:1 天
2014-3-23 22:43:08 显示全部楼层
yafeilinux 发表于 2014-3-22 10:09
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include

老师你好,这个方法很有效。setFocus()这个函数是在当无法触发输入时才使用的,又学到了一点新知识。谢谢!
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-9-20 10:54:16 显示全部楼层
下载一套基于QT开发的项目源码,比如MeshLab,边读代码边看文章,才能正确理解文章的意思。
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2014-9-24 21:21:35 显示全部楼层
请问yafeilinux老师,这个mousePressEvent函数没有显式地调用,它是如何被调用的?
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2014-9-25 23:00:39 显示全部楼层
江前云后 发表于 2014-9-24 21:21
请问yafeilinux老师,这个mousePressEvent函数没有显式地调用,它是如何被调用的? ...

内部调用的。事件循环中发现鼠标事件会自动调用。
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2014-9-27 14:33:34 显示全部楼层
yafeilinux 发表于 2014-9-25 23:00
内部调用的。事件循环中发现鼠标事件会自动调用。

哦哦,明白了,谢谢yafei老师!
另外还有个问题请教老师:我利用setOverrideCursor()函数改变了鼠标的图标,如果是我自己选定的图片,有时太大就会直接显示出来,请问如何设置鼠标指针图片的大小呢?就像这样:
http://www.qter.org/forum.php?mo ... tid=2251&extra=
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2014-12-16 22:30:17 显示全部楼层
似乎有个问题,这个QMouseEvent不是在那个头文件#include <QMouseEvent>里
1>widget.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall Widget::mousePressEvent(class QMouseEvent *)" (?mousePressEvent@Widget@@MAEXPAVQMouseEvent@@@Z)
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2014-12-17 19:33:02 显示全部楼层
jheyan 发表于 2014-12-16 22:30
似乎有个问题,这个QMouseEvent不是在那个头文件#include 里
1>widget.obj : error LNK2001: 无法解析的外 ...

不是这个原因,你再查找下其他原因吧。
回复 支持 反对

使用道具 举报

累计签到:83 天
连续签到:1 天
2016-1-12 16:14:47 显示全部楼层
好东西,就是有点一笔带过
回复 支持 反对

使用道具 举报

累计签到:8 天
连续签到:1 天
2016-6-29 23:06:05 显示全部楼层
//注意,只有在QWidget中这样做才有效,本类是继承自QMainWindow,所以这样设置也还是不起作用的
    setMouseTracking(true);//默认是false,调用此函数,则只是移动鼠标而不按下 也可以被mouseMoveEvent函数响应了
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2016-7-9 16:42:27 显示全部楼层
声明处少了一个e,是故意的吗
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2016-7-18 15:42:16 显示全部楼层
还是不能理解深层的用法
回复 支持 反对

使用道具 举报

累计签到:580 天
连续签到:3 天
2016-8-12 10:17:03 显示全部楼层
要想实现mouseMoveEvent,则需要在构造函数中添加setMouseTrack(true)
回复 支持 反对

使用道具 举报

累计签到:580 天
连续签到:3 天
2016-8-12 10:21:32 显示全部楼层
在源文件widget.cpp文件中添加头文件包含:
#include <QMouseEvent>
而头文件widget.h文件添加鼠标按下事件处理函数声明:
protected:
    void mousePressEvent(QMouseEvent *);

为什么这样子,头文件的函数声明不会报错的?

不应该是头文件widget.h中添加头文件包含吗?
#include <QMouseEvent>




4.到

点评

QMouseEvent *只是用到了指针,不需要完整的定义  发表于 2016-8-15 15:45
回复 支持 反对

使用道具 举报

累计签到:580 天
连续签到:3 天
2016-8-12 10:59:37 显示全部楼层
滚轮事件
void Widget::wheelEvent(QWheelEvent *e)
{
    int x = ui->pushButton->x();
    int y = ui->pushButton->y();
    int numDegrees = e->delta() / 8;//滚动的角度,*8就是鼠标滚动的距离
    int numSteps = numDegrees / 15;//滚动的步数,*15就是鼠标滚动的角度
    if (e->orientation() == Qt::Horizontal) {
        ui->pushButton->move(x,y-numSteps);
    } else {
        ui->pushButton->move(x,y+numSteps);
    }
    e->accept();      //接收该事件
}
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2017-1-20 16:39:46 显示全部楼层
请问void Widget::keyPressEvent(QKeyEvent *e)这个事件处理函数的名字格式是固定的吗?
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2017-1-20 16:42:16 显示全部楼层
Ethan123 发表于 2017-1-20 16:39
请问void Widget::keyPressEvent(QKeyEvent *e)这个事件处理函数的名字格式是固定的吗? ...

是。
回复 支持 反对

使用道具 举报

尚未签到

2017-6-27 11:37:58 显示全部楼层
谢谢,问题解决了。。。
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2017-7-20 10:43:53 显示全部楼层
感觉还是不够啊,我学Qt是为了做个小游戏玩玩,学了三四天了感觉没学到啥有关游戏的内容啊,我买了《Qt cteator 》的,请问大佬知不知道有关鼠标事件,键盘事件,图片的应用在哪几页有详解啊?麻烦告知下,感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了