Информация об изменениях

Сообщение Re: mouse press & release & double click events от 01.02.2017 9:04

Изменено 01.02.2017 9:06 nen777w

Re: mouse press & release & double click events
N>Есть ли нормальный способ избежать этого?

Пытался сделать на таймере, (хотя это фигня полная)
Вот что я вижу в обработчиках событий. И наверно я чего то недопонимаю.

Код примерно такой:

CTOR()
{
    m_dblclick_timer.setInterval(QApplication::doubleClickInterval() + 200);
    m_dblclick_timer.setSingleShot(true);

    connect(&d->m_dblclick_timer, SIGNAL(timeout()), this, SLOT(dblclick_timeout()));
}

mousePressEvent()
{
   qDebug() << "mousePressEvent";

   if(!d->m_dblclick_timer.isActive()) {
       d->m_dblclick_timer.start();
   }

   QWidget::mousePressEvent(event);
}

mouseReleaseEvent()
{
   qDebug() << "mouseReleaseEvent";

   QWidget::mouseReleaseEvent(event);
}

mouseDoubleClickEvent()
{
  qDebug() << "mouseDoubleClickEvent";

  d->m_dblclick_timer.stop();

   QWidget::mouseDoubleClickEvent(event);
}


Результат когда делаю doubleClick:

mousePressEvent
mouseReleaseEvent
mouseDoubleClickEvent <--почему он тут а не после следующих двух?
mousePressEvent
mouseReleaseEvent
dblclick_timeout <--почему сработал timout() у него запас 200ms еще и ему сделали stop(), разве он должен сработать? Делал ради хозмы 1000ms та же катина!!!

Ладно с этим порядком событий, видимо какая то особенность реализации (надо код смотреть). Но блин почему таймер срабатывает???

Видимо прийдется выкинуть идею про mouseDoubleClickEvent() и делать что то свое основываясь на manhatanDistance().
Re: mouse press & release & double click events
N>Есть ли нормальный способ избежать этого?

Пытался сделать на таймере, (хотя это фигня полная)
Вот что я вижу в обработчиках событий. И наверно я чего то недопонимаю.

Код примерно такой:

CTOR()
{
    m_dblclick_timer.setInterval(QApplication::doubleClickInterval() + 200);
    m_dblclick_timer.setSingleShot(true);

    connect(&d->m_dblclick_timer, SIGNAL(timeout()), this, SLOT(dblclick_timeout()));
}

mousePressEvent()
{
   qDebug() << "mousePressEvent";

   if(!d->m_dblclick_timer.isActive()) {
       d->m_dblclick_timer.start();
   }

   QWidget::mousePressEvent(event);
}

mouseReleaseEvent()
{
   qDebug() << "mouseReleaseEvent";

   QWidget::mouseReleaseEvent(event);
}

mouseDoubleClickEvent()
{
  qDebug() << "mouseDoubleClickEvent";

  d->m_dblclick_timer.stop();

   QWidget::mouseDoubleClickEvent(event);
}


Результат когда делаю doubleClick:

mousePressEvent
mouseReleaseEvent
mouseDoubleClickEvent <--почему он тут а не после следующих двух?
mousePressEvent
mouseReleaseEvent
dblclick_timeout <--почему сработал timout() у него запас 200ms еще и ему сделали stop(), разве он должен сработать? Делал ради хохмы 1000ms та же катина!!!

Ладно с этим порядком событий, видимо какая то особенность реализации (надо код смотреть). Но блин почему таймер срабатывает???

Видимо прийдется выкинуть идею про mouseDoubleClickEvent() и делать что то свое основываясь на manhatanDistance().