2008-12-09 18 views
5

Tengo una clase heredada QTreeWidget (llamada PackList) y su principal es una KXmlGuiWindow. ¿Cómo puedo acceder a las ranuras para padres?¿Cómo acceder al widget principal en qt?

he tratado getParent() -> MySlot() de la clase QTreeWidget pero tengo

error: no matching function for call to 'PackList::mySlot()' 

¿Alguien sabe la manera correcta? Gracias

Respuesta

11

Si conoce la clase de los padres, que tendrá que emitir parentWidget() para esa clase y luego llame a su ranura. Tenga en cuenta si es una ranura no hace ninguna diferencia en este caso. Estás llamando a un método.

((KXmlGuiWindow*)parentWidget())->mySlot(); 

Puede realizar la llamada sin transmitir conectando su señal a la ranura.

connect(this, SIGNAL(mySignal()), parentWidget(), SLOT(mySlot())); 

Por último, se puede utilizar QMetaObject::invokeMethod llamarlo si no quiere echarlo. Eso es probablemente excesivo.

+0

Esta es la forma correcta de hacerlo. Lo he usado sin typecast 'parentWidget()) -> setEnabled();' y anulo la función setEnabled del padre. Y luego, mi modificación no funcionó. Bueno, me di cuenta más tarde que este es un error tan tonto, pero creo que puede ser un punto que muchos compañeros pueden perder el tiempo. de todas formas; NO OLVIDE EL TIPECAST. – MeM

1

No estoy seguro de entender completamente su pregunta.

Sin embargo, puede acceder al widget padre de un widget con parentWidget().

Entonces, usted debe ser capaz de llamar a cualquier ranura pública:

parentWidget()->a_slot(); 
+0

lo siento, no funciona ... – Giancarlo

+0

resuelto conectando el evento en el elemento primario en lugar de la lista de paquete – Giancarlo

Cuestiones relacionadas