外部情報: Qt を使用してアプリケーションを構築しようとしています。このアプリケーションは、QMdiArea と子ウィンドウを備えています。私の子ウィンドウには、QMdiArea に統合するか、分離して子自体に添付できるメニューがあります。ただし、これは必要以上に詳細です...
問題: 子ウィジェットに「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.
Wでは、それは決して起こりません。event
また、サブウィンドウのQMainWindowとeventFilterをQMdiAreaに移動しようとしました。QMdiArea 内からデフォルトのキーハンドラーを削除するのと同じくらい単純なことを行うのは、少し複雑すぎるようです。