setcolumnstretch example addwidget c++ qt resize window

c++ - example - Qt ventana de cambiar el tamaño del problema



qt5 qgridlayout (2)

Usamos una combinación de diseñador y código para crear diseños, el sistema de diseño de Qt puede ser muy poco intuitivo a veces. Pero probablemente no diseñaría una serie completa de pestañas en un único archivo ui de diseñador, haría que cada pestaña tuviera cada artilugio y luego las ensamblaría a través del código o en el diseñador promocionando a clases personalizadas. Esto le da una mejor separación de responsabilidades, al poner toda la funcionalidad de todas las pestañas en un solo archivo, casi garantiza una clase difícil de manejar.

Cuando un widget tiene widgets secundarios en el diseñador, puede asignarle un diseño agregándolo desde el menú contextual. Asegúrese de que no haya nada seleccionado y haga clic en el fondo del widget en el que desea crear un diseño, seleccione el diseño y a todos los widgets se asignará el diseño a los niños.

Lo que sí ayuda es crear jerarquías de diseños. Mirando su primera captura de pantalla, probablemente usaría un diseño vertical con espaciadores en la parte superior e inferior para los elementos de la derecha, un diseño horizontal con espaciadores a la izquierda y derecha para la barra de botones y un diseño de cuadrícula para todos los elementos. Sin los espaciadores, sus elementos se extenderán cuando la ventana crezca. Los espaciadores te permitirán controlar mejor el comportamiento al cambiar el tamaño.

Tengo un problema para volver a dibujar una ventana de QWidget después de que se haya ajustado su tamaño. He intentado update() , repaint() , adjustSize() , pero todos parecen sufrir de la misma cosa: solo se vuelve a dibujar una parte de la ventana, lo que provoca que el marco de la ventana en la parte inferior y derecha no se muestre. La ventana tampoco se cambia de tamaño por completo.

En caso de que haga una diferencia, la ventana está en un QMdiArea .

Gracias.

// ... some subwidget resizing and moving. calibrationWindowUIs[activeWindow].layoutWidget2->move(QPoint(oldXLeft, 30 + height + 21)); calibrationWindowUIs[activeWindow].layoutWidget1->move(QPoint(oldXRight, 30 + height + 21)); // Set window size. calibrationWindows[activeWindow]->setMinimumSize(calibrationWindowUIs[activeWindow].tabWidget->geometry().width() + 40, calibrationWindowUIs[activeWindow].tabWidget->geometry().height() + 40); calibrationWindows[activeWindow]->update();

Nota: soy nuevo en Qt; tal vez estoy haciendo algo mal con los diseños?

Editar: puede que no haya dado suficiente información. Muy bien, para ser sincero, todavía tengo que profundizar en los diseños y el material relacionado. Lo que intenté hacer aquí fue usar Qt Designer para diseñar la ventana. He hecho lo que quizás equivale a un error estúpido: no utilicé un diseño general para padres para toda la ventana, sino que lo pirateé con un par de diseños más pequeños que, por lo tanto, tengo que mover y cambiar el tamaño de forma individual. Vea la pantalla Qt Designer (los rectángulos rojos son los únicos diseños): .

Lo que está sucediendo es que en el cuadro de la derecha, estoy reproduciendo un video clip que puede tener varias resoluciones. Quiero que el marco cambie de tamaño dependiendo de esta resolución, lo que también significa que los botones y la ventana tienen que moverse / cambiar el tamaño en consecuencia. Ahí es donde entra el tamaño de la ventana. Estoy seguro de que hay una solución más elegante que la que estoy haciendo aquí, pero estoy tratando de manejar varios otros escenarios aquí y, por lo tanto, la falta de calidad del código.

El resultado es que cuando cargo un clip, la ventana intenta cambiar el tamaño, pero lo hace tan mal; el siguiente es el resultado:

Si la ventana se arrastra, ''aparece'' en su tamaño correcto; Mientras tanto, sin embargo, parece feo.

Un par de preguntas adicionales: ¿usa Qt Designer para diseñar sus UI? Descubrí que programáticamente puede lograr un mejor control de sus interfaces. Una cosa que no pude hacer en el diseñador fue tener un diseño emparentado por el widget principal, es decir, el equivalente a tener el siguiente bit de código:

QVBoxLayout* layout = new QVBoxLayout; this->setLayout(layout);

Un diseño colocado en el diseñador siempre parece crear este subwidget ''layoutWidget'', que el diseño que usted colocó está emparentado. De cualquier manera alrededor de eso?


estás llamando a setMinimumSize() . Está bien, pero también debes llamar a resize()