如何覆盖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()));
}

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

我该怎么修?

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

复制快捷方式的处理发生在QAbstractItemView::keyPressEvent()中。您可以在QTableView中安装一个事件过滤器来监视KeyPress事件,并在那里处理您的副本。

最新更新