【问题标题】:How to override default shortcuts in Qt如何覆盖 Qt 中的默认快捷方式
【发布时间】:2012-08-07 04:00:35
【问题描述】:

我有一个小部件,它可以包含一个或多个 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() 槽也不会被执行。

我该如何修复它?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我正在尝试
    • 嗯,但让我困惑的是 copyAction_ 应该与上下文菜单无关。当然它属于一个,但这不应妨碍它被键序列触发。
    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2019-04-14
    • 2017-09-01
    • 2014-05-04
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多