2011-08-12 54 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); 
    } 
} 

注:我沒有編譯這段代碼,除了內置的編譯器在我的腦海裏面有很多非傳統擴展。