2012-07-16 41 views
3

我在我的應用程序中有一個QTableWidget小部件。我必須在應用程序中分別處理單擊和雙擊鼠標事件。現在,即使雙擊單元格,也只會調用單擊插槽。我如何分別處理它們?在QTableWidget中分別處理單擊和雙擊

以下是信號槽連接的代碼:

connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(myCellClicked(int, int))); 
connect(ui.tableWidget, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(tableItemClicked(QTableWidgetItem*))); 

我在這裏缺少任何其他配置?

+0

也許你點擊太慢,這樣連接呢? :D這很奇怪,因爲這種情況包含在Qt源文件中 – Blood 2012-07-16 11:33:32

+0

我可以想到的一個解決方案是找到兩次點擊之間的時間差,並且如果差異大於某個閾值,則調用單擊時隙。但是這可能會在diff系統上有所不同。其他簡單的解決方案? – 2012-07-16 11:45:51

回答

3

奧基,現在我明白了。幾周前我有類似的問題。問題出在你的QTableWidgetItem中。我不知道它是如何工作的,但有時你可能會錯過你的項目,然後點擊單元格。這就是你可以修復它的方式。

connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(myCellClicked(int, int))); 
connect(ui.tableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(tableItemClicked(int,int))); 

而在你tableItemClicked插槽這樣來做:

void MyWidget::tableItemClicked(int row, int column) 
{ 
    QTableWidgetItem *item = new QTableWidgetItem; 
    item = myTable->item(row,column) 
    /* do some stuff with item */ 
} 
+0

謝謝@血液,它與你的建議。 – 2012-07-16 12:20:27

+0

沒問題:)你的歡迎 – Blood 2012-07-16 12:22:53