Dodatkowe informacje: Próbuję utworzyć aplikację przy użyciu Qt. Ta aplikacja zawiera QMdiArea i okno potomne. Moje okienko-dziecko będzie miało menu, które można zintegrować z QMdiArea lub posegregować i dołączyć do samego dziecka. Choć jest to nieco bardziej szczegółowo niż potrzeba ...Qt - Usuń skrót - Niejednoznaczne przeciążenie skrótem
Problem: „Ctrl + W” Chciałbym moje dziecko-widget mieć menu z skrótów Ale, ponieważ używam QMdiArea, skrót jest już używany powodując:
QAction :: eventFilter: niejednoznaczne przeciążenie skrótu: Ctrl + W
Jak mogę pozbyć się tego skrótu i roszczenia zamiast tego w moim widżecie podrzędnym?
Aktualizacja: Oto co próbowałem bez powodzenia:
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();
};
To działa, jeśli zrobię coś tak prostego jak zmiana Qt::Key_W
do Qt::Key_L.
otrzymaniu Klucz-kombi i zdarzenie zostanie wrzucony . Z W, po prostu nigdy się to nie zdarza. Próbowałem również przenieść event
do QMainWindow, jak również eventFilter w oknie podrzędnym do QMdiArea. Wydaje się, że jest trochę zbyt skomplikowane, aby zrobić coś tak prostego, jak usunąć domyślne klawisze obsługi z poziomu QMdiArea.
Tak jest w żaden sposób wyłączyć skrót QMdiArea stworzył?Zasadniczo oznacza to, że jeśli chcę używać skrótu klawiszowego, muszę użyć połączeń sygnał/gniazdo między tymi dwoma? – Serodis
Ponadto, jeśli jest to absolutnie jedyny sposób, czy istnieje jakakolwiek szkoda w opuszczaniu niejednoznacznego skrótu? IE: Instalowanie skrótu w menu widżetów? Naprawdę nie chcę poświęcać przypomnienia skrótu "Ctrl + W" w pasku menu, ponieważ jest to najlepszy sposób, aby poinformować użytkownika o funkcji skrótów. – Serodis
Aby zmienić domyślne zachowanie 'QMdiArea' w odniesieniu do określonego zdarzenia klucza, należy go podklasować i ponownie zaimplementować' keyPressEvent() '. Innym sposobem jest użycie filtrów zdarzeń. – Arlen