QT按钮实现鼠标双击事件

  利用事件过滤器实现按钮双击功能,新手第一次写这个,网上找不到方便的方法,所以就直接上代码了。

首先,在需要点击的按钮或者控件设置事件过滤器。

例如:ui->btnPressure->installEventFilter(this);

.......................

然后在.h文件添加事件函数

 bool MainWindow::eventFilter(QObject *watched, QEvent *event);

在.cpp文件实现 ,另:项目需要用的比较多,所以给合在一起了。注意分开就好。

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{     
if(watched==ui->btnPressure||watched==ui->btnStart||watched==ui->btnPause||watched==ui->btnUseTime||watched==ui->btnAuxiliary||watched==ui->btnUser||watched==ui->btnTrigger||watched==ui->btnExit)  
  {     
   if(event->type()==QEvent::MouseButtonDblClick)      
  {         
    QMouseEvent *e = static_cast<QMouseEvent *>(event);          
    if(e->button() == Qt::LeftButton)          
     {
                if(watched==ui->btnPressure)
                    qDebug()<<"参数双击了按钮";
                else if(watched==ui->btnStart)
                    qDebug()<<"开始双击了按钮";
                else if(watched==ui->btnPause)
                    qDebug()<<"双压机双击了按钮";
                else if(watched==ui->btnUseTime)
                    qDebug()<<"治疗时间机双击了按钮";
                else if(watched==ui->btnAuxiliary)
                    qDebug()<<"反搏比双击了按钮";
                else if(watched==ui->btnUser)
                    qDebug()<<"用户管理双击了按钮";
                else if(watched==ui->btnTrigger)
                    qDebug()<<"触发模式双击了按钮";
                else if(watched==ui->btnExit)
                   qDebug()<<"退出双击了按钮";
            }

return true;

        }
    }
    return QWidget::eventFilter(watched, event);
}

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现Qt中长按图标按钮并使其跟随鼠标移动,并且实现双击按钮跳转界面,你可以按照以下步骤进行操作: 1. 创建一个自定义的按钮类,继承自`QPushButton`,并重写`mousePressEvent`、`mouseMoveEvent`、`mouseReleaseEvent`和`mouseDoubleClickEvent`方法。这些方法用于处理按钮鼠标事件。 ```cpp class CustomButton : public QPushButton { public: CustomButton(QWidget *parent = nullptr) : QPushButton(parent) {} protected: void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; }; ``` 2. 在 `mousePressEvent` 方法中,检查是否是鼠标左键按下,并记录当前鼠标位置和按钮的初始位置。 ```cpp void CustomButton::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { // 记录当前鼠标位置和按钮的初始位置 m_dragStartPosition = event->globalPos(); m_buttonStartPosition = this->pos(); } } ``` 3. 在 `mouseMoveEvent` 方法中,计算鼠标移动的偏移量,并将按钮的位置更新为初始位置加上偏移量。 ```cpp void CustomButton::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { // 计算鼠标移动的偏移量 QPoint offset = event->globalPos() - m_dragStartPosition; // 更新按钮的位置 this->move(m_buttonStartPosition + offset); } } ``` 4. 在 `mouseReleaseEvent` 方法中,检查鼠标是否释放。 ```cpp void CustomButton::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { // 执行按钮的默认行为 QPushButton::mouseReleaseEvent(event); } } ``` 5. 在 `mouseDoubleClickEvent` 方法中,检查是否是鼠标双击事件,并在双击时执行跳转界面的操作。 ```cpp void CustomButton::mouseDoubleClickEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { // 执行跳转界面的操作 // 这里可以根据需要进行界面跳转的处理 // 例如:使用QStackedWidget切换到另一个界面 } } ``` 6. 在你的窗口中使用自定义按钮类。 ```cpp CustomButton *button = new CustomButton(this); button->setIcon(QIcon("path/to/your/icon.png")); button->setFixedSize(50, 50); button->setStyleSheet("QPushButton { border: none; }"); button->setCursor(Qt::PointingHandCursor); button->setToolTip("Drag me and double click to jump!"); button->show(); ``` 通过以上步骤,你创建了一个可以长按并跟随鼠标移动的图标按钮,并且实现双击按钮跳转界面的功能。当你长按按钮并移动鼠标时,按钮会跟随鼠标移动;双击按钮时,会执行跳转界面的操作。 请注意,你需要将按钮放置在一个窗口或其他容器中,并确保启用了鼠标跟踪功能。你还可以根据需要自定义按钮的外观和行为。 希望这能帮助到你!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值