长按鼠标按QToolButton调用释放的信号

时间:2014-11-07 10:30:00

标签: qt

我定义了QToolButton。我已经写了两个用于按下和释放信号的插槽。

void EyImgGalleryWindow::toolPressed()
{
 if(Uptimer->timerId() == -1)
    Uptimer->start();
 m_CustomGalleryView->scrollUp();
}

void EyImgGalleryWindow::toolReleased()
 {
   Uptimer->stop();
   m_CustomGalleryView->scrollUpRelease();
 }

当发出press()信号时,我正在启动一个计时器,当发出释放的信号时,我正在停止计时器。

所以这里我的实现是当计时器超过3s我正在更新变量。我只有在用户长按此QToolButton时才更新变量。

但是在这种情况下我的实现失败了。当我长按QToolButton时,它会以相等的间隔发出Pressed和Released信号。当长按时,我们应该只获得一次释放信号,为什么这里它多次调用释放信号。我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

您可以通过下一个事件过滤器及QElapsedTimer来了解长按:

QElapsedTimer el;//somewhere

//...

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{

    if(obj == ui->pushButton_13 && event->type() == QEvent::MouseButtonPress)
    {
        el.start();
    }
    if(obj == ui->pushButton_13 && event->type() == QEvent::MouseButtonRelease)
    {
        qDebug() << el.elapsed();//in milliseconds, you can divide by 1000 to get seconds
        if(el.elapsed() > 1000)
            qDebug() << "long";
        else
            qDebug() << "not long";
    }
    return QObject::eventFilter(obj, event);
 }

适用于pushButtonslabelstoolButtons等。