Посторонняя информация:
Я пытаюсь создать приложение, используя 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.