如何通过快捷方式触发我的QAction?

时间:2016-03-16 05:11:38

标签: qt kde

我的代码中有一个QAction,它链接到一个工具栏按钮和一个快捷方式。此QAction用于设置焦点并显示过滤条小部件。 QAction在快捷方式调用时需要特殊事件处理,因此焦点将在我的过滤器栏小部件上设置。然而,如果使用工具栏按钮触发,则会切换过滤条的可见性。

我的QAction是:

QAction* showFilterBar = actionCollection()->addAction("show_filter_bar");
showFilterBar->setText(i18nc("@action:inmenu Tools", "Filter"));
showFilterBar->setToolTip(i18nc("@info", "Toggle the Filter Bar"));
showFilterBar->setIcon(QIcon::fromTheme("view-filter"));
showFilterBar->setCheckable(true);
actionCollection()->setDefaultShortcut(showFilterBar, Qt::CTRL | Qt::Key_I);
connect(showFilterBar, &QAction::triggered, this, &DolphinMainWindow::toggleFilterBar);

我的toggleFilterBar函数的代码是:

void DolphinMainWindow::toggleFilterBar()
{
    m_activeViewContainer->setFilterBarVisible(!m_activeViewContainer->filterBarHasFocus());
    updateViewActions();
}

因此,我的问题是,我需要弄清楚是否通过按下ToolBar按钮调用了QAction,或者它是否被快捷方式调用。我怎么能找到这个?

1 个答案:

答案 0 :(得分:1)

为QAction快捷键的快捷方式创建一个单独的插槽(它将是唯一的)。例如:

new QShortcut(QKeySequence( Qt::CTRL + Qt::Key_I),
                  this, SLOT(slotshowFilterBarShortCut()));

所以shortCut触发器将被单独调用。正常动作触发器将在单独的插槽中调用。