2012-08-07 46 views
0

我有一個小部件可以包含一個或多個QTableView子部件。默認情況下,當我在其中一個QTableView中選擇一個範圍並按下crtl + c時,只有最左邊的最上面的單元格被複制到剪貼板。我想複製整個範圍,所以我實現了一個複製()插槽來完成這項工作。我希望複製插槽可以從上下文菜單中訪問(當用戶進行選擇並右鍵點擊相應的QTableView時)和ctrl + c快捷方式。如何覆蓋Qt中的默認快捷方式

class Widget 
{ 
    Q_OBJECT 
public: 
    void setupContextMenu(); 

private: 

    QMenu* contextMenu_; 
    QAction* copyAction_; 
    QTableView* tableView_; 

private slots: 
    void copy(); 
} 

void Widget::setupContextMenu() 
{ 
    contextMenu_ = new QMenu(this); 
    copyAction_ = contextMenu_->addAction("&Copy"); 
    copyAction_->setShortcut(QKeySequence::Copy); 
    connect(copyAction_, SIGNAL(triggered()), 
      this, SLOT(copy())); 
} 

當我選擇一個範圍並右鍵單擊時,彈出相應的上下文菜單,它甚至包含快捷方式的名稱。當我在上下文菜單中單擊「複製」動作時,複製()插槽會被執行。然而,ctrl + c快捷方式僅複製選區中最左邊的最上面的單元格。另外,copy()插槽不會被執行。

我該如何修復?

回答

3

我不確定,但可能快捷鍵不適用於Qt中的上下文菜單?

複製快捷方式的處理髮生在QAbstractItemView::keyPressEvent()。您可以install an event filter到您的QTableView觀看KeyPress事件,並在那裏處理您的副本。

+0

謝謝,我現在正在嘗試 – 2012-08-07 05:03:08

+0

嗯,但讓我陷入困境的事情是copyAction_應該與上下文菜單無關。確定它屬於一個,但不應該阻止它被一個關鍵序列觸發。 – 2012-08-07 05:26:24

相關問題