简单功能区:如何在 QTabBar 中使用 QActions?

Simple ribbon: how to use QActions within QTabBar?

我正在尝试使用 Qt5 实现简单的选项卡式界面。我使用 QTabWidget 并将 QToolBar 放在其选项卡内,然后将 QAction 添加到 QToolBar 中。

可行,但会导致以下问题:任何操作仅在其父选项卡处于活动状态时才可访问。如果我尝试对当前 "invisible" 操作使用键盘快捷键,我将不会成功。由于没有菜单等,选项卡是唯一放置操作的地方。

以下是我将元素添加到工具栏的方法:

QTabWidget *ribbon               = new QTabWidget(window);
QToolBar *tool_bar_game          = new QToolBar(tab_game);
QAction *action_go_to_next_level = new QAction(window);

action_go_to_next_level->setText(QApplication::translate("Window", "&Next", 0));
action_go_to_next_level->setIcon(QIcon::fromTheme("go-last"));
action_go_to_next_level->setShortcut(QApplication::translate("Window", "PgDown", 0));


ribbon->addTab(tool_bar_game, tr("Game"));
tool_bar_game->addAction(action_go_to_next_level);

和截图:

即使操作的父选项卡当前未打开,我怎样才能使用快捷方式访问操作?

我对这不起作用并不感到惊讶,实际上您尝试在隐藏的小部件上使用快捷方式。如果这行得通,那将是非常混乱的。

明显的解决方法是将快捷方式而不是 QAction 添加到始终处于活动状态的小部件。就个人而言,我建议 window.

在没有测试代码的情况下,我相信这应该可行:

QTabWidget *ribbon               = new QTabWidget(window);
QToolBar *tool_bar_game          = new QToolBar(tab_game);
QAction *action_go_to_next_level = new QAction(window);

action_go_to_next_level->setText(QApplication::translate("Window", "&Next", 0));
action_go_to_next_level->setIcon(QIcon::fromTheme("go-last"));

QShortcut *page_down = new QShortcut(QKeySequence("PgDown"), window);
// trigger the action when the shortcut is activated
QObject::connect(page_down,               &QShortcut::activated,
                 action_go_to_next_level, &QAction::trigger);

ribbon->addTab(tool_bar_game, tr("Game"));
tool_bar_game->addAction(action_go_to_next_level);