如何覆盖Qt中的默认快捷方式

时间:2012-08-07 04:00:35

标签: c++ qt

我有一个可以包含一个或多个QTableView子窗口小部件的窗口小部件。默认情况下,当我在其中一个QTableViews中选择一个范围并点击crtl + c时,只有最左边的最上面的单元格被复制到剪贴板。我想复制整个范围,所以我实现了一个copy()插槽来完成这项工作。我希望可以从上下文菜单(当用户进行选择并且右对齐QTableView时)和ctrl + c快捷方式访问复制槽。

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()));
}

当我选择一个范围并右键单击时,会弹出相应的上下文菜单,它甚至包含快捷方式的名称。当我单击上下文菜单中的“复制”操作时,将执行copy()插槽。但是,ctrl + c快捷键只复制选择中最左边最上面的单元格,如前所述。此外,copy()槽不会被执行。

我该如何修理?

1 个答案:

答案 0 :(得分:3)

我不确定但是快捷键可能不适用于Qt中的上下文菜单吗?

复制快捷方式的处理发生在QAbstractItemView::keyPressEvent()中。您可install an event filter向QTableView观看KeyPress事件,并在那里处理您的副本。