2016-02-27 52 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:很確定窗口可以幫你,就像它也刪除了它的所有子窗口小部件一樣。 –