2011-08-12 49 views
3

我想知道是否有长按新闻事件可用Qt
我正在处理的模块需要长时间按下。我看到在C7中长时间按下卸载程序Qt中的长按事件

按钮单击事件和按钮按下事件给出了相同的结果吧?

alfah

+1

你说的是按键(键盘)还是点击(鼠标)? –

+0

这是桌面,symbian还是其他的东西?每种情况下的答案可能都不相同。 – Torp

+0

抱歉,不清楚。是的,我在谈论按键。我想知道是否有办法实现长按键。即如果我点击按钮,一旦它做了一个活动,如果我按两次它做了另一个活动。现在我想按住一段时间来开始另一项活动。 – alfah

回答

3

你可以看看Qt的gesture framework
你是后手势将是QTapAndHoldGesture然后我想。

+0

抱歉,不清楚。是的,我在谈论按键。我想知道是否有办法实现长按键。即如果我点击按钮,一旦它做了一个活动,如果我按两次它做了另一个活动。现在我想按住一段时间来开始另一项活动。 – alfah

+0

供参考:2017年第二个链接已经死亡,并且... Qt4.x?那么做什么:http://doc.qt.io/qt-5/gestures-overview.html和这个:http://doc.qt.io/qt-5/qtapandholdgestgest.html –

+0

breadcrumbs:QT Quick 5有['pressAndHold'信号](http://doc.qt.io/qt-5/qml-qtquick-controls2-abstractbutton.html#pressAndHold-signal) –

2

您可以使用

keyPressEvent (QKeyEvent * event) 

keyReleaseEvent (QKeyEvent * event) 

的手柄long_press_event

0

快速容易老式方式,如果你不想使用该手势的东西去有点像这样:

声明毫秒时间戳保持上次按下的时间。

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 *); 

定义鼠标按下并释放处理器,像这样:

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); 
    } 
} 

注:我没有编译这段代码,除了内置的编译器在我的脑海里面有很多非传统扩展。