2016-02-27 105 views
2

我试图用Qt5实现简单的选项卡式界面。我使用QTabWidgetQToolBar s放置在其标签中,并将QAction s添加到QToolBar s。简单的功能区:如何在QTabBar中使用QActions?

这可行,但会导致以下问题:只有在其父标签处于活动状态时,任何操作才可访问。如果我尝试将键盘快捷键用于当前“隐形”动作,我将无法取得成功。由于没有菜单等,选项卡是唯一放置动作的地方。

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

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

和截图:

Ribbon-like 2-tabs interface

我怎样才能使动作的快捷方式访问,即使在行动的父标签目前没有打开?

+0

你为什么不动'QTabBar'之外的'QToolBar's? –

+0

如果我移动tabbar外的工具栏,我将如何在它们之间切换? – Vercetti

+0

你可以添加一个截图吗?我有点困惑你的QTabBar在哪里。 –

回答

1

我不惊讶,这不起作用,有效地尝试在隐藏的小部件上使用快捷方式。如果这能起作用,将会非常令人困惑。

对此的显而易见的解决方法是将快捷方式而不是QAction添加到始终处于活动状态的小部件。我个人建议这个窗口。

无需测试的代码,我认为这应该工作:

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); 
+0

Yeap,工作!非常感谢! P. S.我应该在析构函数中删除''快捷键我自己还是窗口会为我做? – Vercetti

+1

@Vercetti:很确定窗口可以帮你,就像它也删除了它的所有子窗口小部件一样。 –