Información extraña: Estoy intentando construir una aplicación usando Qt. Esta aplicación presenta un QMdiArea y una ventana hija. My child-window tendrá un menú que se puede integrar en QMdiArea o segregar y adjuntar al propio niño. Sin embargo, esto es un poco más detalle de lo necesario ...Qt - Eliminar atajo - Sobrecarga de acceso directo ambiguo
Problema: me gustaría que mi hijo-widget para tener un menú con un acceso directo, "CTRL + W". Pero, porque yo estoy usando un QMdiArea, el acceso directo se utiliza ya que causa:
QAction :: EventFilter: sobrecarga de acceso directo ambiguo: Ctrl + W
¿Cómo puedo deshacerme de este acceso directo y reclamo dentro de mi widget hijo en su lugar?
Actualización: Aquí es lo que he intentado sin suerte:
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();
};
Esto funciona si hago algo tan simple como el cambio Qt::Key_W
-Qt::Key_L.
La clave-combo se recibe y el evento se lanza . Con W, simplemente nunca sucede. También intenté mover event
a QMainWindow, así como un eventFilter en la subventana a QMdiArea. Parece que es un poco demasiado complicado hacer algo tan simple como eliminar key-handlers por defecto desde dentro de QMdiArea.
Entonces, ¿hay ninguna manera de desactivar el acceso directo que creó QMdiArea?Básicamente significa que si quiero usar la tecla de acceso directo, ¿debo usar conexiones de señal/ranura entre las dos? – Serodis
Además, si eso es absolutamente la única manera, ¿hay algún daño al dejar el acceso directo ambiguo? IE: ¿Instalando el acceso directo en el menú de widgets? Realmente no quiero sacrificar el recordatorio de acceso directo "Ctrl + W" en la barra de menú, ya que es la mejor manera de decirle a un usuario una función de accesos directos. – Serodis
Para alterar el comportamiento predeterminado de 'QMdiArea' con respecto a un evento clave específico es subclasificarlo y volver a implementar' keyPressEvent() '. Otra forma es usar filtros de eventos. – Arlen