我定义了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信号。当长按时,我们应该只获得一次释放信号,为什么这里它多次调用释放信号。我在这里做错了吗?
答案 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);
}
适用于pushButtons
,labels
,toolButtons
等。