Informazioni estranee: Sto tentando di creare un'applicazione utilizzando Qt. Questa applicazione presenta una QMdiArea e una finestra figlio. La finestra del mio bambino avrà un menu che può essere integrato nella QMdiArea o separato e collegato al bambino stesso. Anche se, questo è un po 'più in dettaglio del necessario ...Qt - Rimuovi collegamento - Sovraccarico ambiguo di scelta rapida
Problema: "CTRL + W" Vorrei che il mio bambino-widget di avere un menu con una scorciatoia, Ma, perché sto usando un QMdiArea, il collegamento è già utilizzato causando:
QAction :: eventFilter: sovraccarico scorciatoia ambiguo: Ctrl + W
Come posso liberarmi di questo collegamento e affermazione è invece nel mio widget figlio?
Aggiornamento: Ecco che cosa ho provato senza fortuna:
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();
};
Questo funziona se faccio qualcosa di semplice come il cambiamento Qt::Key_W
-Qt::Key_L.
Il-combinazione di tasti viene ricevuto e l'evento viene lanciato . Con W, non succede mai. Ho anche provato a spostare event
a QMainWindow e un eventFilter nella sottofinestra a QMdiArea. Sembra che sia un po 'troppo complicato fare qualcosa di semplice come rimuovere i gestori di chiavi predefiniti da QMdiArea.
Quindi non c'è un modo per disattivare il collegamento che QMdiArea creato?Fondamentalmente significa che se voglio usare la chiave scorciatoia devo usare le connessioni segnale/slot tra i due? – Serodis
Inoltre, se questo è assolutamente l'unico modo, c'è qualche danno nel lasciare la scorciatoia ambigua? IE: installazione del collegamento sul menu dei widget? Non voglio davvero sacrificare il promemoria di scelta rapida "Ctrl + W" nella barra dei menu, poiché questo è il modo migliore per dire a un utente una funzione di scorciatoie. – Serodis
Per modificare il comportamento predefinito di 'QMdiArea' in relazione a un evento chiave specifico, è necessario creare una sottoclasse e reimplementare' keyPressEvent() '. Un altro modo è utilizzare i filtri eventi. – Arlen