一鼠标事件
1.用鼠标事件,加头文件#include <QMouseEvent>
2.常用函数表
功能 | 函数 | 备注 |
单击 | void mousePressEvent(QMouseEvent *event); | 分左键 右键 |
双击 | void mouseDoubleClickEvent(QMouseEvent *event); | |
移动 | void mouseMoveEvent(QMouseEvent *event); | 默认触发需要点击,,此处设置自动触发setMouseTracking(true); |
释放 | void mouseReleaseEvent(QMouseEvent *event); | |
滚轮 | void wheelEvent(QWheelEvent *event); | 2个转动方向 |
void Widget::mousePressEvent(QMouseEvent *event) //单击
{
if(event->button() == Qt::LeftButton){ //左键按下,改变指针形状存指针位置与窗口位置的差值。
···
}
else if(event->button() == Qt::RightButton){ // 如果是鼠标右键按下
···
}
}
void Widget::mouseDoubleClickEvent(QMouseEvent *event) //双击
{
if(event->button() == Qt::LeftButton){ // // 如果是鼠标左键按下
···
}
}
void Widget::mouseMoveEvent(QMouseEvent *event) // 移动
{
// 这里必须使用buttons()
if(event->buttons() & Qt::LeftButton){ //进行的按位与
···
}
}
void Widget::wheelEvent(QWheelEvent *event)// 滚轮事件
{
if(event->delta() > 0){ // 当滚轮远离使用者时
···
}else{ //当滚轮向使用者方向旋转时
···
}
}
二 键盘事件
1.用键盘事件,加头文件#include <QKeyEvent>
2.常用函数表
功能 | 函数 | 备注 |
按下 | void Widget::keyPressEvent(QKeyEvent *event) | 举例 event->key() == Qt::Key_Up PS:区分普通按键 / 特殊按键(Ctrl......) |
释放 | void Widget::keyReleaseEvent(QKeyEvent *event) |
void Widget::keyPressEvent(QKeyEvent *event) // 键盘按下事件
{
if(event->modifiers() == Qt::ControlModifier){ // 是否按下Ctrl键 特殊按键
if(event->key() == Qt::Key_M) // 是否按下M键 普通按键 类似
···
}
else QWidget::keyPressEvent(event); //保存默认事件
if(event->key() == Qt::Key_Up){ //如果处理两个普通按键,得避免自动重复,释放中也要处理
if(event->isAutoRepeat()) return; // 按键重复时不做处理
keyUp = true; // 标记向上方向键已经按下
}else if(event->key() == Qt::Key_Left){
if(event->isAutoRepeat()) return;
keyLeft = true;
}
}
void Widget::keyReleaseEvent(QKeyEvent *event) // 按键释放事件
{
···
if(event->key() == Qt::Key_Up){ //如果是处理两个普通按键,得避免自动重复
if(event->isAutoRepeat()) return;
···
}
else if(event->key() == Qt::Key_Left){
if(event->isAutoRepeat()) return;
···
}
}