無關信息: 我正在嘗試使用Qt構建應用程序。此應用程序具有QMdiArea和一個子窗口。我的孩子窗口將有一個菜單,可以將其整合到QMdiArea中,也可以將其分隔並粘貼到孩子身上。雖然,這比需要更多的細節......Qt - 刪除快捷方式 - 模糊的快捷方式超載
問題: 我想我的孩子 - 小部件有一個快捷鍵,菜單「CTRL + W」。但是,因爲我用的是QMdiArea,快捷鍵已被使用,可造成:
的QAction :: eventFilter:曖昧快捷超載:按Ctrl + W
我怎樣才能擺脫這種快捷和索賠它在我的孩子小部件呢?
更新: 這是我一直沒有運氣嘗試:
class MDI : public QMdiArea
{
Q_OBJECT
private:
bool event(QEvent *tEvent)
{
if (tEvent->type() == QEvent::KeyPress)
{
QKeyEvent* ke = static_cast<QKeyEvent*>(tEvent);
if (ke->key()== Qt::Key_W && ke->modifiers() & Qt::ControlModifier)
emit KeyCW();
return true;
}
return QMdiArea::event(tEvent);
}
public:
signals:
void KeyCW();
};
這工作,如果我做的改變Qt::Key_W
一樣簡單Qt::Key_L.
一些關鍵-COMBO接收和事件拋出。用W,它永遠不會發生。我也嘗試將event
移動到QMainWindow以及子窗口中的eventFilter到QMdiArea。從QMdiArea中刪除默認的關鍵處理程序這樣簡單的操作似乎有些過於複雜。
那麼,有沒有辦法禁用快捷方式創建QMdiArea?基本上,如果我想使用快捷鍵,我必須在兩者之間使用信號/插槽連接。 – Serodis 2011-12-22 13:30:37
另外,如果這絕對是唯一的方法,那麼離開模棱兩可的捷徑會有什麼傷害嗎? IE:在窗口小部件菜單上安裝快捷方式?我真的不想犧牲菜單欄中的「Ctrl + W」快捷方式提醒,因爲這是告訴用戶快捷方式功能的最佳方式。 – Serodis 2011-12-22 13:46:02
要改變'QMdiArea'關於特定關鍵事件的默認行爲,就是對它進行子類化並重新實現'keyPressEvent()'。另一種方法是使用事件過濾器。 – Arlen 2011-12-22 21:57:51