2011-07-01 9 views
9

Estoy creando un software que debe ser accesible por el padre a childrenWidget (o hijos de los hijos de los hijos ....) y de los niños a la parentWidget (o el padre del padre del padre de familia ...) .cómo sacar el parentWidget Top (base) en QT?

Por ejemplo:

QWidget_Principal --> WidgetApplications --> WidgetMenuBar --> PushButtonFullScreen. 

El problema es que la forma en que puedo hacer esto, está haciendo

this->parentWidget()->parentWidget()->parentWidget()->showFullScreen(); 

Esta Hay una manera simple de hacer eso?

Gracias de antemano y lo siento por mi mala Inglés. Muy

Luis Da Costa

Respuesta

26

uso QWidget * QWidget::window() const para obtener control de ventana para el widget.

También hay QWidgetList QApplication::topLevelWidgets() [static] función, para obtener la lista de todos los controles de nivel superior en su aplicación ...

+0

http://doc.qt.io/qt-4.8/qwidget.html#window – Vortexfive

2

Sólo tiene que escribir una función global:

QWidget* TopLevelParentWidget (QWidget* widget) 
    { 
    while (widget -> parentWidget() != Q_NULLPTR) widget = widget -> parentWidget() ; 
    return widget ; 
    } 
+0

utilizar mejor un elenco dinámico para estar seguro, que se obtiene una QWidget adecuada. – Jens

4

Otro enfoque:

QWidget* topWidget = QApplication::topLevelAt(yourWidget->mapToGlobal(QPoint()));