qt 双击事件处理

本文详细介绍了在Qt中处理鼠标双击事件的过程,包括事件处理函数的声明与实现,以及如何通过信号和槽机制实现双击触发的特定功能。通过实例展示了如何在特定类中重写mouseDoubleClickEvent函数,以实现全屏与退出全屏的功能转换。

qt双击事件响应和实现

      接着上面的播放器全屏功能来写,一般播放器的全屏都是通过双击左键来实现的。
qt中有一个事件叫做mouseDoubleClickEvent,对应的就会有一个函数来处理这个事件,那就是void mouseDoubleClickEvent (*e)函数,它是一个虚函数,每当对应的类产生双击事件时,就会自动调用这个函数,前提是这个类有这个函数。qt4中以下类有这个函数:

我们使用的QGraphicsView类是继承了QAbstractScrollArea的mouseDoubleClickEvent函数,咱们的任务就是把这个函数重构一下就可以了。
首先在头文件中声明一下:
protected:
    void mouseDoubleClickEvent ( QMouseEvent * );
然后cpp文件中就可以这样处理:

/*---------------------------------------------------------------------------

函数名:鼠标双击事件

函数功能:对鼠标双击的响应

函数输入:QMouseEvent *mouseEvent

函数输出:无

备注:

---------------------------------------------------------------------------*/

void 类名::mouseDoubleClickEvent(QMouseEvent *mouseEvent)

{

//这是我声明的一个用来判断是应该全屏还是退出全屏的标志位,是个unsigned char型,可换成bool的

gIndex = ~gIndex; //每次翻转一次

if( mouseEvent->buttons() == Qt::LeftButton) //判断是否左键双击

{

//这个是一个停止双击延时,双击延时用来区分单击和双击,可暂时不用,下一篇文章将介绍如何区分

//delayTimer->stop();

if(gIndex & 0x1)

emit fullScreen(); //发送全屏信号

else

emit subwindow(); //退出全屏

}

}

然后把前面介绍的信号和槽连接起来就能实现简单的双击全屏了。

connect(类名, SIGNAL(fullScreen()), this, SLOT(fullScreenSlot()));

connect(类名, SIGNAL(subwindow()), this, SLOT(subWindowGraphic()));


Qt中,处理双击事件涉及到事件系统的相关机制以及特定的使用方法。 ### 处理机制 当用户进行双击操作时,Qt的事件系统会依次产生一系列事件。首先是第一次鼠标按下(`mousePressEvent`),接着是第一次鼠标释放(`mouseReleaseEvent`),然后是第二次鼠标按下(`mousePressEvent`)和第二次鼠标释放(`mouseReleaseEvent`),最后才触发双击事件(`mouseDoubleClickEvent`) [^1]。 ### 使用方法 要在Qt中使用双击事件,通常需要在自定义的`QWidget`派生类中重写`mouseDoubleClickEvent`函数。以下是一个简单的示例代码: ```cpp #include <QWidget> #include <QMouseEvent> #include <QDebug> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr) : QWidget(parent) {} protected: void mouseDoubleClickEvent(QMouseEvent *event) override { // 可以通过event参数获取是哪个鼠标键进行了双击操作 if (event->button() == Qt::LeftButton) { qDebug() << "Left button double clicked"; } else if (event->button() == Qt::RightButton) { qDebug() << "Right button double clicked"; } // 调用基类的处理函数,确保默认行为被执行 QWidget::mouseDoubleClickEvent(event); } }; ``` 在上述代码中,自定义了一个`MyWidget`类,继承自`QWidget`。重写了`mouseDoubleClickEvent`函数,在函数内部可以根据`event->button()`判断是哪个鼠标键进行了双击操作,并进行相应的处理。最后调用了基类的`mouseDoubleClickEvent`函数,以确保默认行为被执行。 ### 注意事项 - 要确保在重写`mouseDoubleClickEvent`函数时,正确处理事件参数,根据不同的鼠标键进行不同的操作。 - 如果需要在双击事件发生时执行一些特定的逻辑,可在重写的函数中添加相应的代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值