Событие длинного нажатия в Qt - PullRequest
3 голосов
/ 12 августа 2011

Я просто хочу знать, доступно ли длинное нажатие в Qt
Модуль, над которым я сейчас работаю, требует длительного нажатия. Я видел долгое нажатие в C7 для удаления

Событие нажатия кнопки и событие нажатия кнопки дают одинаковый результат, верно?

alfah

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

Вы можете взглянуть на каркас жестов Qt ,
Жест, за которым вы будете следовать, будет QTapAndHoldGesture тогда я думаю.

2 голосов
/ 12 августа 2011

Вы можете использовать

keyPressEvent ( QKeyEvent * event )

и

keyReleaseEvent ( QKeyEvent * event )

для дескриптора

1 голос
/ 21 декабря 2016

быстрый , легкий и старомодный способ, если вы не хотите использовать этот жест, материал выглядит примерно так:

В заголовке объявляется метка времени в миллисекундах для хранения времени последнего нажатия.

private:
    // Remembers the point in time when mouse button went down
    quint64 mLastPressTime=0;
    // Pressing and holding for one full second constitutes a "longpress", set whatever value in milliseconds you want here.
    static const quint64 MY_LONG_PRESS_THRESHOLD=1000; 
protected:
    // Declare that we are overriding QWidget's events for mouse press and release
    void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
    void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
signals:
    // Our custom signal to emit once a longpress is detected.
    void longPressEvent(QMouseEvent *);

В source определяют обработчики нажатия и отпускания мыши, напримерИтак:

void MyClass::mousePressEvent(QMouseEvent *event)
{
    // Remeber last time mousr was pressed
    mLastPressTime=QDateTime::currentMSecsSinceEpoch();
}

void MyClass::mouseReleaseEvent(QMouseEvent *event)
{
    // Calculate for how long the button has been pressed upon release
    const quint64 pressTime = QDateTime::currentMSecsSinceEpoch() - mLastPressTime;
    // The press time exceeds our "threshold" and this constitutes a longpress
    if( pressTime > MY_LONG_PRESS_THRESHOLD){
        // We pass the original mouse event in case it is useful (it contains all sorts of goodies like mouse posittion, which button was pressed etc).
        emit longPressEvent(event);
    }
}

ПРИМЕЧАНИЕ. Я не компилировал этот код, за исключением встроенного в мою голову компилятора, который имеет множество нетрадиционных расширений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...