Qt实战案例(10)——利用Qt实现鼠标事件的事件处理

鼠标事件包括鼠标的移动,鼠标按下、松开、单击、双击等。

目录

    • 一、项目介绍
    • 二、项目基本配置
    • 三、UI界面设计
    • 四、主程序实现
      • 4.1 mainwindow.h头文件
      • 4.2 mainwindow.cpp源文件
    • 五、效果演示

一、项目介绍

当用户操作鼠标在特定区域内移动,状态栏右侧会实时显示当前鼠标所在的位置信息;当用户按下鼠标键时,状态栏左侧会显示用户按下的键属性(左键、右键或中键),并显示按键时的鼠标位置;当用户松开鼠标键时,状态栏左侧又会显示松开时的位置信息。

二、项目基本配置

新建一个Qt案例,项目名称为“MouseEvent”,基类选择“QMainWindow”,取消创建UI界面复选框的选中状态,完成项目创建。

三、UI界面设计

无UI界面

四、主程序实现

4.1 mainwindow.h头文件

在mainwindow.h的protected中声明四个函数:

protected:
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);
    void mouseDoubleClickEvent(QMouseEvent *e);

定义两个私有变量:

private:
    QLabel *statusLabel;
    QLabel *MousePosLabel;

以及导入相应的包:

#include
#include
#include

4.2 mainwindow.cpp源文件

MainWindow主函数内进行定义:

    setWindowTitle("鼠标事件");            //设置窗体的标题
    statusLabel = new QLabel;             //创建QLabel用于显示在状态栏中
    statusLabel->setText("当前位置:");    //设置QLabel显示内容
    statusLabel->setFixedWidth(100);     //设置固定宽度为100
    MousePosLabel = new QLabel;          //显示鼠标按下或释放时的位置
    MousePosLabel->setText(tr(""));      //初始化不显示任何内容
    MousePosLabel->setFixedWidth(100);   //设置固定宽度为100
    statusBar()->addPermanentWidget(statusLabel);  //状态栏中增加控件
    statusBar()->addPermanentWidget(MousePosLabel);//状态栏中增加控件
    this->setMouseTracking(true);     //设置窗体追踪鼠标
    resize(400,200);    //调整窗体大小,宽度为400,高度为200

定义鼠标按下事件响应函数:

//鼠标按下事件响应函数
void MainWindow::mousePressEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")"; //(x,y)
    if(e->button()==Qt::LeftButton)
    {
        statusBar()->showMessage(tr("左键:")+str);//左键:(x,y)
    }
    else if(e->button()==Qt::RightButton)
    {
        statusBar()->showMessage(tr("右键:")+str);//右键:(x,y)
    }
    else if(e->button()==Qt::MiddleButton)
    {
        statusBar()->showMessage(tr("中键:")+str);//中键:(x,y)
    }
}

定义鼠标移动事件响应函数:

//鼠标移动事件响应函数
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");//显示内容(x,y)
}

定义鼠标松开事件响应函数:

//鼠标松开事件响应函数
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")";
    statusBar()->showMessage(tr("释放在:")+str,1000); //释放在:(x,y),显示1000ms后隐藏
}

定义鼠标双击事件响应函数,此处没有实现具体功能,但仍要写出函数体框架:

void MainWindow::mouseDoubleClickEvent(QMouseEvent *e){}

五、效果演示

显示效果如下:
Qt实战案例(10)——利用Qt实现鼠标事件的事件处理_第1张图片

完整代码可参考:https://download.csdn.net/download/didi_ya/42892164

ok,以上便是全部内容了,如果对你有所帮助,记得点个赞哟~

【Tips】:如果低版本运行出错,可以需要在文字的双引号外加上tr()函数,详情可参考tr()函数,实测Qt5以上均可正常运行。

你可能感兴趣的:(Qt,qt,ui,c++)