Tengo un QStackedWidget
que contiene varias páginas llenas de varios QLineEdit
y niños. Quiero emitir una señal cada vez que QStackedWidget
ya no tenga ningún niño con foco (dado que un niño tenía el foco para empezar). Por lo tanto, el movimiento de un niño a otro no emitirá una señal, pero una vez que se selecciona un widget fuera del QStackedWidget
, se emite una señal. ¿Algún consejo sobre cómo implementar esto? Miré InstallEventFilter
y QSignalMapper
, pero ninguno de esos parece ajustarse a mis necesidades. Cualquier consejo sería apreciado.Emitir señal si todos los widgets hijos pierden el foco
Respuesta
Esto es un poco complicado. Incluso cuando va en bicicleta de un niño a otro, hay un breve período después de que un niño pierde el enfoque y antes de que otro niño gane el foco donde ningún niño del artilugio apilado tiene enfoque. Aunque este estado es extremadamente efímero, es una cuestión de hecho.
La única opción que puedo ver es decidir cuánto tiempo transcurrirá entre que un widget hijo pierde el foco y ningún widget secundario gana el tiempo suficiente para declarar que, de hecho, ningún widget secundario tiene foco. Este sería un mecanismo similar a lo que se usa para distinguir dos clics de un solo mouse de un doble clic.
Esto podría lograrse utilizando un temporizador y un filtro de eventos en el padre registrado con cada hijo, que busca los eventos de entrada y salida de foco. Configure el temporizador para algún intervalo (¿100 ms?) E inícielo siempre que se reciba un evento de enfoque. Si recibe un foco en el evento mientras el temporizador todavía está funcionando, detenga el temporizador. Si el temporizador se completa, puede disparar una señal propia para indicar que ningún widget hijo tiene foco.
Puede conectarse a la señal QApplication :: focusChanged para evaluar los widgets de enfoque dentro de una ranura correspondiente. La forma más limpia de hacer esto es para derivar de QStackedWidget:
class StackedFocusWidget : public QStackedWidget {
Q_OBJECT
public:
StackedFocusWidget(QWidget *parent = 0) : QStackedWidget(parent) {
connect(qApp, SIGNAL(focusChanged(QWidget *, QWidget *)), this, SLOT(onFocusChanged(QWidget *, QWidget *)));
}
private slots:
void onFocusChanged(QWidget *old, QWidget *now) {
bool focusOld = old != 0 && isAncestorOf(old);
bool focusNow = now != 0 && isAncestorOf(now);
if (!focusOld && focusNow) {
emit gotFocus();
} else if (focusOld && !focusNow) {
emit lostFocus();
}
}
signals:
void gotFocus();
void lostFocus();
};
Las señales StackedFocusWidget :: GotFocus y StackedFocusWidget :: LOSTFOCUS se emitirán cada vez que el widget apilados o cualquiera de sus niño recibe o pierde el foco.
- 1. Spy ++ y ventanas cerradas cuando pierden foco
- 2. Eclipse Juno: cómo minimizar las vistas cuando pierden el foco?
- 3. Mostrando todos los hijos de cada padre
- 4. emitir std :: string con señal qt
- 5. Qt fuerza QCheckBox para emitir señal en setChecked
- 6. Evitar disparar el evento desenfoque si alguno de sus hijos recibe foco
- 7. Bootstrap: mostrar todos los artículos de Typeahead en el foco
- 8. jQuery: ¿Cómo selecciono todos los P hijos de mi padre?
- 9. ActiveRecord encontrar todos los padres que tienen hijos asociados
- 10. jquery seleccionar todos los hijos después de nth-child
- 11. ¿Cómo conseguir que todos los hijos de un padre controlen?
- 12. Obtenga todos los hijos inmediatos y nada más profundo
- 13. ¿Es posible emitir una señal Qt desde un método const?
- 14. dojo: destruir todos los widgets por nodo dom
- 15. Obtener todos los widgets de pestañas en QTabWidget
- 16. Qt obtener hijos del diseño
- 17. En JSF2, ¿cómo saber si el componente compuesto tiene hijos?
- 18. ¿El propietario de QBoxLayout se convierte en el propietario de todos los widgets de diseño?
- 19. Seleccionar padre si todos los niños cumplan con los criterios
- 20. Node.js - El mejor método para emitir eventos desde los módulos
- 21. ¿Cómo se causa manualmente una señal de otro control para emitir?
- 22. No se construyen los módulos hijos Maven
- 23. ¿Cómo se obtienen todos los términos hijos de un término de SharePoint en C#?
- 24. Android: Cómo forzar la actualización de todos los widgets de un tipo particular
- 25. Establecer el foco de QLineEdit en Qt
- 26. Obtener una notificación/evento/señal cuando un widget Qt obtiene el foco
- 27. Loop a través de todos los "widgets"/elementos en una actividad
- 28. jquery seleccionar todos los elementos excepto un div y sus hijos
- 29. PHP función recursiva para eliminar todos los nodos hijos causas Stackoverflow
- 30. Cómo matar a todos los hijos del shell actual en la interrupción?
Esto funcionó perfecto, ¡gracias! – Jmbryan10