qt - guia - qgis manual
Qt: Mismo widget dentro de dos diseños diferentes (2)
Lo que intento lograr es que un widget pueda existir en dos diseños diferentes, en este caso en QHBoxLayout y en QVBoxLayout. Estoy implementando un sistema que cambia dinámicamente entre los dos diseños cuando cambia la orientación de la pantalla de un dispositivo.
Actualmente estoy creando, digamos un widget compuesto complejo llamado MyWidget y agregándolo en dos diseños diferentes:
MyWidget *wgt = new QWidget();
QVBoxLayout vlayout;
QHBoxLayout hlayout;
vlayout->addWidget(wgt);
hlayout->addWidget(wgt);
Ahora imagine que ambos diseños están alojados dentro de un diseño ''raíz'', y que este diseño raíz puede cambiar su tamaño a un modo ''paisaje'' más ancho que alto y a un modo ''retrato'' más alto que ancho.
MyWidget se muestra correctamente solo en el primer diseño al que se agrega, y cuando los diseños se cambian, muestra todo mal o no aparece.
No sé si estoy teniendo sentido aquí, pero este es mi problema. Tal vez cuando se llame al evento switch, se deben cambiar el tamaño de todos los widgets y diseños para que siempre se vea bien. El único problema es que no sé cómo.
Esta no es una solución general para cambiar diseños, sino una solución fácil en su caso: simplemente cambie la dirección de la caja.
hlayout->setDirection(QBoxLayout::TopToBottom);
// now your hboxlayout works as vertical layout
hlayout->setDirection(QBoxLayout::LeftToRight);
// and now it is horizontal again
Esto no es particularmente fácil de hacer, pero es posible.
En primer lugar, recomendaría que realmente cree dos widgets diferentes, uno para el vertical y otro para el horizontal, y administre las cosas de esa manera. Si los datos de origen están separados de manera adecuada de la clase de UI, debería poder hacerlo sin demasiados problemas, pero incurriendo en cierta sobrecarga de memoria.
Una forma de hacer lo que desee es eliminar por completo los widgets de un diseño y agregarlos al otro cuando necesite cambiar la disposición en la pantalla, y cambiar el diseño que se agrega al widget. Esto debería provocar que los mismos widgets se dibujen de una manera diferente.
Una forma diferente y más compleja de manejar esto (aunque potencialmente más eficiente) sería escribir su propio diseño y hacer que maneje los widgets de reorganización según el cambio de orientación.