1.enterEvent/leaveEvent
当鼠标进入enterEvent重写的那个控件,就会触发enterEvent,如果鼠标离开该控件,就会触发leaveEvent
新建一个c++的类使用多态重写enterEvent函数来实现自己想要的功能
void Label::enterEvent(QEvent *event)
{ (void)event;
qDebug()<<"enterEvent";
}
void Label::leaveEvent(QEvent *event)
{
(void)event;
qDebug()<<"leaveEvent";}
需要注意的是需要对那个ui界面上的label进行提升
2.mousePressEvent/mouseReleaseEvent(鼠标按下/鼠标释放)
void Label::mousePressEvent(QMouseEvent *event)
{
qDebug()<<event->x()<<","<<event->y();//鼠标按下,显示鼠标的坐标
}
也可以显示鼠标在电脑屏幕上的坐标
void Label::mousePressEvent(QMouseEvent *event)
{
//qDebug()<<event->x()<<","<<event->y();//鼠标按下,显示鼠标的坐标
qDebug()<<event->globalX()<<","<<event->globalY();//鼠标按下,显示鼠标在电脑屏幕上的坐标
}
根据鼠标不同键按下,debug不同的信息
void Label::mousePressEvent(QMouseEvent *event)
{
//qDebug()<<event->x()<<","<<event->y();//鼠标按下,显示鼠标的坐标
// qDebug()<<event->globalX()<<","<<event->globalY();//鼠标按下,显示鼠标在电脑屏幕上的坐标
if(event->button()==Qt::LeftButton)
{
qDebug()<<"左键被按下";
}
if(event->button()==Qt::RightButton)
{
qDebug()<<"右键被按下";
}
}
鼠标释放时触发槽函数
void Label::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{qDebug()<<"左键释放";}
else if(event->button()==Qt::RightButton)
{qDebug()<<"右键释放";}
}
3.mouseDoubleClickEvent
如果鼠标被双击,则触发该槽函数
void Label::mouseDoubleClickEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
qDebug()<<"左键被按下";
}
if(event->button()==Qt::RightButton)
{
qDebug()<<"右键被双击";
}
}
4.mouseMoveEvent
如果鼠标移动了触发该槽函数
void Label::mouseMoveEvent(QMouseEvent *event)
{
qDebug()<<event->x()<<","<<event->y();
}
还必须要实时打印鼠标坐标的话,还必须加上下面的
Label::Label(QWidget *parent):QLabel(parent)
{
(void)parent;
this->setMouseTracking(true);//设置鼠标追踪
}
5.wheelEvent
滚轮事件
当滚轮滚动时,打印出滚轮位置的改变值
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
data=0;//全局变量用来记录滚轮的当前值
}
Widget::~Widget()
{
delete ui;
}
void Widget::wheelEvent(QWheelEvent *event)
{
data+=event->delta();//加上变化值
qDebug()<<data;//打印结果
}
6.keyPressEvent
当键盘有键按下,触发该槽函数
void Widget::keyPressEvent(QKeyEvent *event)
{
if(event->key()==Qt::key_A)//A键如果被按下
{qDebug()<<"A被按下";}
}
如果是组合键的话
void Widget::keyPressEvent(QKeyEvent *event)
{
if(event->key()==Qt::Key_A&&event->modifiers()==Qt::ControlModifier)
{
qDebug()<<"ctrl+a键被按下";
}
}