2013-02-12 58 views
1
左和右鍵點擊區分

我有一個QTableView中,其中兩個左和右擊鼠標導致一些工作,在QTableView中

右鍵單擊要啓動上下文菜單,左應打開另一個過程。

我爲此使用以下所連接在我的QMainWindow

connect(Table , SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(tableContextMenu(const QPoint&))); 
connect(Table , SIGNAL (clicked (const QModelIndex&)), this, SLOT(test())); 

的問題是看相當簡單。由於我使用clicked()信號來捕獲左鍵單擊 - 也會捕獲右鍵單擊。所以,如果我點擊右鍵按鈕,通過上下文菜單,該行動左側點擊保留沿發生以及

我該如何避免這種情況? 請提醒。謝謝。

編輯

我的代碼是這樣設置:

Table = new QTableView(this); 
TableLayout *t = new TableLayout(); 
Table->setModel(t); 
Table->setContextMenuPolicy(Qt::CustomContextMenu); 
connect(Table , SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(tableContextMenu(const QPoint&))); 

這是我如何做到這一點的右鍵快捷菜單,以及所有在P14MainWindow構造函數,它是一個對象定義QMainWindow。 現在我應該在哪裏重新實現MouseReleaseEvent

回答

2

要啓動上下文菜單重新實現QTableView::contextMenuEvent(QContextMenuEvent* e),同樣重新實現QTableView::mouse...Event(QMouseEvent* event)趕上鼠標事件。

然後使用QTableView::indexAt(const QPoint& pos) const在點擊網站返回模型索引。

這裏是左點擊操作的例子:

void Table::mouseReleaseEvent(QMouseEvent* event) 
{ 
    QTableView::mouseReleaseEvent(event); 

    if (event->button == Qt::LeftButton) { 
     test(); 
    } 
} 
+0

我試過了。我把'連接(表,SIGNAL(mousePressEvent(QMouseEvent *)),這一點,SLOT(測試(QMouseEvent *)));'和'測試(QMouseEvent *)',我檢查哪個按鈕被點擊等等。但是,我總是在調試窗口的消息**對象::連接:沒有這樣的信號QTableView中:: mousePressEvent(QMouseEvent *)** – user1173240 2013-02-12 10:49:07

+0

犯錯......他們不是插槽。它們是通過對象的事件分派器從事件隊列中接收事件的方法。閱讀文檔:http://qt-project.org/doc/qt-4.8/eventsandfilters.html – cmannett85 2013-02-12 10:52:45

+0

Ah..context菜單不是問題。那麼,我知道我怎麼才能用'clicked()'信號來做到這一點。所以它進入'test()'插槽,我可以確定哪個按鈕被點擊過,避免右鍵點擊,只要點擊鼠標左鍵就可以繼續。這會讓事情變得更簡單,而不是重新實現。 – user1173240 2013-02-12 11:15:11