Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué significa QLayout en QT?

¿Qué significa QLayout en QT?

En un sentido estricto, el marco de gestión de diseño de Qt se refiere al sistema de gestión de diseño basado en QLayoutItem/QLayout (o, en el caso de QGraphicsSystem, debería decirse que es una serie de subclases relacionadas basadas en QGraphicsLayoutItem/QGraphicsLayout). el diseño se define ampliamente Para administrar la posición y el tamaño del control, existen tres métodos para lograr este objetivo en QT

Posicionamiento absoluto: Llame a la función QWidget::setGeometry() en el código para posicionar absolutamente el control

Posicionamiento manual: escriba código para posicionar el control de acuerdo con los cambios de parámetros en la función (como resizeEvent)

Posicionamiento manual: escriba código para posicionar el control de acuerdo a los cambios de parámetros en la función (como resizeEvent)

Así es como se hace en QT

El diseño es una forma de gestionar la posición y el tamaño de los controles. Usando el administrador de diseño para posicionar controles

Usando la clase QLayout para posicionar controles

Diseño y controles

En GTK, diseño y Widget no están completamente separados, ni Clase de diseño separada. Cada control es responsable de administrar el diseño de sus controles secundarios, solo que algunos controles administran más, o están esencialmente dedicados a administrar el diseño, mientras que otros administran menos.

En QT, Layout y Widget son clases relativamente independientes, pero no es razonable que Layout exista solo; debe usarse junto con Widget. Los widgets no son responsables de gestionar el diseño de los controles secundarios. Puede pensar en una clase de diseño como un conjunto de código preescrito que administra la posición y el tamaño de los controles secundarios en función de parámetros preestablecidos y varias señales geométricas cuando cambia el tamaño del control principal.

Sin embargo, existen algunas excepciones, como la clase QMainWindow, que gestiona por sí sola el diseño de los controles secundarios predefinidos.

Alguna lógica interna

***Cómo gestiona el diseño los componentes y las jerarquías***

El primer paso es configurar la clase QLayout a través del QWidget ::Función setLayout Establecer como administrador de diseño del control. En realidad, este paso establece el control como la clase principal de la clase QLayout.

Después de eso, el widget generalmente se agrega al sistema de gestión de diseño de la clase Layout a través de funciones como QLayout::addWidget()

.

Sin embargo, Layout en sí no es el control principal del widget, debido a que el control principal de la clase QWidget solo puede ser la clase QWidget, por lo que Layout se convertirá en el control principal que redirige los controles secundarios que administra. su propio control parental.

Además, dado que la clase QWidget en sí no es un QLayoutItem, Qlayout se administra como un QLayoutItem. Por lo tanto, en la operación addWidget, QLayout también crea QWidgetItem, una subclase de QLayoutItem, para encapsular y representar los controles secundarios agregados, y el objeto QWidgetItem eventualmente cargará y establecerá información de parámetros de diseño desde el sistema de administración de diseño QLayout a su objeto QWidget delegado. Objeto

Diseño de grupo (apilado)

QStackedLayout Personalmente, creo que llamarlo diseño agrupado es un poco vago y es más apropiado traducirlo directamente como un diseño apilado. Esta clase de diseño administra los controles secundarios de manera diferente a otros QBoxLayout, QGridLayout, etc. Es más específico.

QStackedLayout no se centra en la gestión de la posición de los subcontroles. Gestiona los subcontroles apilados y controla principalmente qué subcontrol está en el nivel superior.

Puede establecer parámetros para determinar si los hay. solo el nivel superior actual Si el control es visible (comportamiento predeterminado) o si todos los controles secundarios son visibles (esto permite efectos como la visualización superpuesta, que por supuesto requiere que el control de nivel superior tenga un área transparente).

Además, independientemente de cómo se establezcan los parámetros de apilamiento, el contenido del control principal de QStackedLayout es visible siempre que el control secundario que se muestra actualmente tenga un área transparente.