21,486
社区成员
发帖
与我相关
我的任务
分享tab press
event QMouseEvent(MouseMove, buttons=LeftButton, localPos=42,8, screenPos=2489,347)
event QHoverEvent(HoverMove, 0x7ffd8266b280)
event QTimerEvent(id=6)
QTimerEvent 6
tab release
on_pushButton_clicked()
long press ui->pushButton->isDown() ? true
event QInputMethodQueryEvent(queries=0x1, {})
usertimezone 8 28800
long press into timeset
tab press
event QMouseEvent(MouseButtonRelease, LeftButton, localPos=42,8, screenPos=2489,347)
event QPaintEvent(QRegion(0,0 80x25))
tab release
on_pushButton_clicked()
tab press
event QMouseEvent(MouseButtonRelease, LeftButton, localPos=48,13, screenPos=2495,352)
event QPaintEvent(QRegion(0,0 80x25))
tab release
on_pushButton_clicked()
long press ui->pushButton->isDown() ? false
)
看了你的回答的我的理解是 Repeat触发的click事件会伴随着一个QTimerEvent[/quote]
其实在这之前我瞄了眼MouseEvent,它是没有repeat这个东西的,所以一个按钮被鼠标点击还能连续触发,那基本就是一个定时器做出来的。
所以应该说是鼠标按下Delay时间后会启动一个多次触发的TimerEvent,由timeOut再次触发click槽
)
Test4::Test4(QWidget *parent) : QWidget(parent)
{
pb = new QPushButton(this);
pb->setGeometry(0,0, 60,30);
pb->setObjectName("TestButon");
pb->setText("Test");
pb->setAutoRepeat(true);
pb->setAutoRepeatDelay(1000);
pb->setAutoRepeatInterval(100);
pb->installEventFilter(this);
connect(pb, SIGNAL(clicked(bool)), this, SLOT(pbSlot()));
}
void Test4::pbSlot()
{
qDebug()<<"click";
}
bool Test4::eventFilter(QObject *watched, QEvent *event)
{
qDebug()<<event;
return QWidget::eventFilter(watched, event);
}
第一步结果:
第二步:官网找类
并没有什么复杂用法。
第三步:过滤相关事件和对象
bool Test4::eventFilter(QObject *watched, QEvent *event)
{
//qDebug()<<event;
if(event->type() == QEvent::Timer)
{
if(watched == pb)
{
QTimerEvent *te = (QTimerEvent *)event;
qDebug()<<te->timerId();
}
}
return QWidget::eventFilter(watched, event);
}
由此可见,还是可以判断的出Button是不是由repeat触发的。
先说明一下,我这里按下按钮后并没有立即触发一次click事件,而是delay 1000ms之后才开始有事件。