2014-03-03 81 views
0

到目前爲止,我有這樣的代碼,它工作正常:QListWidget itemClicked和itemDoubleClicked - 塊單一的點擊,如果雙擊

QObject::connect(mListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*))); 
QObject::connect(mListWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*))); 

的問題是,我每次雙擊某個項目時,itemClicked插槽被執行。

如果用戶雙擊一個項目,我可以阻止itemClicked插槽嗎?所以只需itemDoubleClicked得到執行?

回答

0

感謝vahancho的想法,使用計時器。這裏是我的解決方案:

YourClass.h

private: 
    QListWidgetItem* mSingleClickedItem; 
    bool mDoubleClicked; 

private slots: 
    void itemClickedTimeout(); 

YourClass.m

void YourClass::itemClicked(QListWidgetItem* listWidgetItem) { 
    if (!mDoubleClicked) { 
     QTimer::singleShot(300, this, SLOT(itemClickedTimeout())); 
     // use QApplication::doubleClickInterval() instead of 300 
     mSingleClickedItem = listWidgetItem; 
    } 
} 

void YourClass::itemClickedTimeout() { 
    if (!mDoubleClicked) { 
     // do something, listitem has been clicked once 
    } else mDoubleClicked = false; 
} 

void YourClass::itemDoubleClicked(QListWidgetItem* listWidgetItem) { 
    mDoubleClicked = true; 

    // do something, listitem has been clicked twice 
} 
1

實際上雙擊一個項目會產生itemClickeditemDoubleClicked信號:點擊+點擊。您可以使用計時器並在超時後檢查信號是否在itemClicked之後發生,如果是,則忽略itemClicked信號。

+0

是否有任何內置的是什麼?計時器對我來說似乎是一個骯髒的解 – Niklas

+0

@Niklas,我同意,這是棘手的,但我不知道任何內置的解決方案。 – vahancho

+0

我發佈了我的解決方案。感謝這個想法 – Niklas