2012-08-07 102 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