Посторонняя информация: Я пытаюсь создать приложение с использованием Qt. Это приложение имеет QMdiArea и дочернее окно. В моем дочернем окне будет меню, которое может быть интегрировано в QMdiArea или разделено и привязано к самому ребенку. Хотя, это немного более подробно, чем это необходимо ...Qt - Удалить ярлык - Неоднозначная перегрузка ярлыков
Проблема: Я хочу, чтобы мой ребенок-виджет, чтобы иметь меню с ярлыком «CTRL + W.» Но, так как я использую QMdiArea, ярлык уже используется в результате чего:
QAction :: eventFilter: Неоднозначные перегрузки ярлык: Ctrl + W
Как я могу избавиться от этого ярлыка и претензии это вместо моего дочернего виджета?
Update: Вот что я пытался не повезло:
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.
поэтому не существует никакого способа отключить ярлык, который QMdiArea создан?В основном это означает, что если я хочу использовать короткий ключ, я должен использовать соединения между сигналами/слотами между ними? – Serodis
Кроме того, если это абсолютно единственный способ, есть ли какой-либо вред, если вы оставите двусмысленный ярлык? IE: Установка ярлыка в меню виджетов? Я действительно не хочу жертвовать ярлыком «Ctrl + W» в панели меню, так как это лучший способ сказать пользователю функцию ярлыков. – Serodis
Чтобы изменить поведение QMdiArea по умолчанию в отношении конкретного ключевого события, необходимо подклассифицировать его и повторно реализовать 'keyPressEvent()'. Другой способ - использовать фильтры событий. – Arlen