一:qt的鼠标事件包含头文件 <QMouseEvent>
二:qt鼠标事件需要重写虚函数
(1):鼠标移动事件(需捕捉到鼠标后,才可以打印坐标,在QWidget内点击鼠标后,就可以捕捉到鼠标)
void mouseMoveEvent(QMouseEvent *event);
void Widget::mouseMoveEvent(QMouseEvent *event)
{
QPoint p_ab = event->globalPos();//相对于整个桌面的位置
QPoint p_re = event->pos();//相对于Widget窗口内的位置
QString str1, str2;
str1 = QString("%1 , %2").arg(p_ab.x()).arg(p_ab.y());//存放相对于整个桌面的x,y坐标
str2 = QString("%1 , %2").arg(event->x()).arg(event->y());//存放相对于Widget的x,y坐标
//str2 = QString("%1 , %2").arg(p_re.x()).arg(p_re.y());//存放相对于Widget的x,y坐标,与上面等价
qDebug() << str1 << " | " << str2 << endl;
}
(2):持续捕捉鼠标事件(持续捕捉鼠标事件,不用按下鼠标,只要鼠标在QWidget内移动,就可以捕捉)
鼠标移动事件,只要移动鼠标,就会触发这个函数,其中,正常情况下,只有当鼠标在QWidget界面点击鼠标后,才会捕捉到鼠标的坐标,那如何实现,在不点击鼠标的情况下,也可以捕捉到鼠标移动事件呢?
代码如下:文章来源:https://www.toymoban.com/news/detail-490976.html
//QWidget的构造函数
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//添加如下代码
this->setMouseTracking(true);//持续捕捉鼠标事件,不用按下鼠标也可以捕捉到;
}
(3):鼠标点击事件(左键点击,右键点击)
void mousePressEvent(QMouseEvent *event);
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button() & Qt::LeftButton)
{
qDebug() << "鼠标左键按下" << endl;
}
else if(event->button() & Qt::RightButton)
{
qDebug() << "鼠标右键按下" << endl;
}
}
(4):鼠标释放事件(左键释放,右键释放)
void mouseReleaseEvent(QMouseEvent *event);
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button() & Qt::LeftButton)
{
qDebug() << "鼠标左键释放" << endl;
}
else if(event->button() & Qt::RightButton)
{
qDebug() << "鼠标右键释放" << endl;
}
}
(5):鼠标双击事件(左键双击,右键双击)
void mouseDoubleClickEvent(QMouseEvent *event);
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
if(event->button() & Qt::LeftButton)
{
qDebug() << "鼠标左键双击" << endl;
}
else if(event->button() & Qt::RightButton)
{
qDebug() << "鼠标右键双击" << endl;
}
}
(6):滚轮事件(只涉及了鼠标滚轮的滚动,不涉及鼠标滚轮的按下)
void wheelEvent(QWheelEvent *event);
void Widget::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
qDebug() << "滚轮远离使用者" << endl;
}
else if(event->delta() < 0)
{
qDebug() << "滚轮靠近使用者" << endl;
}
}
三,鼠标与窗口(还未实验,需要考证)
(1):进入窗口区域事件(还未实验,需要考证)
比如在主窗口QWidget下有一个父窗口Lable,在鼠标进入Lable窗口时,就会触发此函数文章来源地址https://www.toymoban.com/news/detail-490976.html
void MyLabel::enterEvent(QEvent *)
{
QString text=QString("<center><h1>Mouse enter</h1></center>");
this->setText(text);
}
(2):离开窗口区域事件(还未实验,需要考证)
void MyLabel::leaveEvent(QEvent *){
QString text=QString("<center><h1>Mouse leave</h1></center>");
this->setText(text);
}
到了这里,关于qt鼠标事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!