qt listwidget 长按事件
时间: 2023-05-20 10:05:40 浏览: 312
Qt下使用ListWidget
5星 · 资源好评率100%
可以通过重载 QListWidget 的 mousePressEvent 和 mouseReleaseEvent 函数来实现长按事件的检测。具体实现可以参考以下代码:
void MyListWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_pressPos = event->pos();
m_pressTime = QDateTime::currentDateTime();
}
QListWidget::mousePressEvent(event);
}
void MyListWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
QPoint releasePos = event->pos();
QDateTime releaseTime = QDateTime::currentDateTime();
int distance = (releasePos - m_pressPos).manhattanLength();
int duration = m_pressTime.msecsTo(releaseTime);
if (distance < QApplication::startDragDistance() && duration > QApplication::startDragTime())
{
emit longPress();
}
}
QListWidget::mouseReleaseEvent(event);
}
在这个实现中,我们记录了鼠标按下的位置和时间,然后在鼠标释放时计算鼠标移动的距离和按下到释放的时间间隔,如果距离小于 QApplication::startDragDistance()(默认值为 4 像素)且时间大于 QApplication::startDragTime()(默认值为 500 毫秒),则认为触发了长按事件,发出 longPress 信号。
阅读全文