Pensé que el diseño es solo un widget que mantiene más widgets dentro. Pero ahora descubro que no puedo agregarlo a otros widgets usando addWidget. Por ejemplo, ¿cómo agregar un diseño a QSplitter?Qt: ¿cuál es la diferencia entre el diseño y el widget?
Respuesta
QWidget ha incorporado soporte para diseños a través de las funciones layout()
y setLayout(...)
. El objeto de disposición controla el posicionamiento de diferentes widgets secundarios que se pueden agregar al diseño. Además, se asegura de dimensionar correctamente su widget padre según el constraints especificado. Si el diseño aún no tiene un widget principal, tan pronto como el diseño se adjunte a un widget con setLayout()
, se establecerá el tamaño de ese widget principal.
Pero, algunos widgets son más como un administrador de diseño que un widget, como QSplitter y . Considere, por ejemplo, QSplitter. Aunque es un widget único, presenta dos áreas diferentes con las que se puede trabajar. En este caso, un único administrador de disposición para dos áreas diferentes realmente no tiene sentido. Al igual que QSplitter, QTabWidget tiene algunos comportamientos que hacen que un solo diseño no solo sea innecesario sino no útil.
Creo que es la combinación anterior de diseño y widget lo que hace que la separación entre el diseño y el widget a veces resulte confusa.
No, un diseño no es un widget o un contenedor. Un diseño es más como un "ayudante" que está conectado a una ventana y determina el mejor lugar para colocar cada widget.
Este ejemplo de la documentación de Qt debería ayudar (http://qt.nokia.com/doc/4.2/layout.html):
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);
window->show();
QLayout
s son controladores de distribución. Gestionan el posicionamiento y el cambio de tamaño de widgets dentro de un widget padre. De los documentos:
Los diseños son una forma elegante y flexible de organizar automáticamente los widgets infantiles dentro de su contenedor. Cada widget informa sus requisitos de tamaño al diseño a través de las propiedades sizeHint y sizePolicy, y el diseño distribuye el espacio disponible en consecuencia.
Por ejemplo, establecer el diseño de un widget en QHBoxLayout
dará como resultado que sus widgets secundarios se distribuyan horizontalmente.
Puedes leer más al respecto here.
- 1. ¿Cuál es la diferencia entre Q_WS_ * y Q_OS_ * en Qt?
- 2. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 3. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 4. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 5. ¿Cuál es la diferencia entre el mango y el hilo?
- 6. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 7. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 8. ¿Cuál es la diferencia entre el localizador de servicios y el patrón de diseño de fábrica?
- 9. ¿Cuál es la diferencia entre el
- 10. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 11. ¿Cuál es la diferencia entre la tubería y el zócalo?
- 12. ¿cuál es la diferencia entre el material y la textura?
- 13. ¿Cuál es la diferencia entre el casting y la conversión?
- 14. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 15. ¿Cuál es la diferencia entre el colado y la coerción?
- 16. Diferencia entre qt y PyQt4
- 17. ¿cuál es la diferencia entre los navegadores y el nodo?
- 18. ¿Cuál es la diferencia entre el cifrado SHA y AES?
- 19. ¿Cuál es la diferencia entre el enlace primero y reciente?
- 20. ¿cuál es la diferencia entre net.tcp y el protocolo TCP?
- 21. ¿Cuál es la diferencia entre .sqlite y el archivo .db?
- 22. ¿cuál es la diferencia entre voltearse y pasar el mouse?
- 23. ¿Cuál es la diferencia entre: = y + = en el archivo make?
- 24. ¿Cuál es la diferencia entre el cifrado GET y POST?
- 25. ¿Cuál es la diferencia entre VBScript's y el operador &?
- 26. ¿Cuál es la diferencia entre el nuevo operador y Class.newInstance()?
- 27. ¿Cuál es la diferencia entre el formato OMF y COFF?
- 28. ¿Cuál es la diferencia entre el operador "=" y "==" en Bash?
- 29. ¿Cuál es la diferencia entre setattr() y el objeto .__ setattr __()?
- 30. cuál es la diferencia entre las plantillas y el polimorfismo
Si usa el idioma del patrón de diseño Modelo-vista-controlador. ¿Es correcto decir que el "diseño" es el controlador? o ¿no puedes relacionar esto con el patrón de diseño "modelo-vista-controlador"? –