qt button designer qmenu qtoolbar

combobox en qt



¿Hay alguna manera de definir una QToolbar con botones y menús emergentes usando Qt Designer? (3)

Deseo tener una barra de herramientas en Qt que contenga QActions o QToolbarButtons que tengan menús emergentes adjuntos. He podido hacer esto perfectamente en el código creando un QMenu, agregándolo a un QToolbarButton y luego agregando eso a la QToolbar. Mi problema es que esto debería poder hacerse completamente en el diseñador.

Esto es lo que he hecho a través del código, quiero definir los botones y menús en qt designer:

Lo que queremos hacer con qt designer es separar el código de la interfaz. Por ejemplo, esto significa que una persona puede diseñar la apariencia y los componentes del formulario y luego un programador puede tomar esto y codificar la funcionalidad detrás de él. No podemos lograr esto de manera muy efectiva si las barras de herramientas y los menús deben ser diseñados por el programador.

Parece que esto sería un requisito bastante común para muchas aplicaciones, y no puedo ver cómo Qt podría haber forzado a que esto se haga en código en lugar de diseñador.

Si alguien tiene alguna idea de cómo se hace esto, ¿me está perdiendo algo en Qt?


En la parte superior izquierda de Qt Creator, cuando diseñas una GUI, debe haber un cuadro que incluya cosas como "barra de herramientas principal" y "barra de menú". Asegúrate de que haya algo similar a esto. Luego, en la parte inferior de la ventana de Qt Creator, hay un espacio ocupado por una pestaña del Editor de señales y ranuras y una pestaña del Editor de acciones. Vaya al editor de acciones y seleccione la opción Nueva acción. Esto te permitirá crear una acción. Esto es lo que estabas buscando?


El soporte de la barra de herramientas en QT Designer parece ser un poco intuitivo y limitado. No conozco ninguna forma de agregar menús emergentes con acciones desplegables directamente a una barra de herramientas en QT Designer.

Puede agregar botones de la siguiente manera. Primero, haga clic con el botón derecho en su ventana principal y seleccione "Agregar barra de herramientas", si aún no tiene una. Esto debería agregar una barra de herramientas MUY SLIM en la parte superior de la ventana principal (delgada porque está vacía).

A continuación, agregue una acción en el Editor de acciones. Es uno de los paneles de QT Designer, seleccione Ver-> Editor de acciones si no lo ve. Puedes crear nuevas acciones aquí.

A continuación, arrastre las acciones a la barra de herramientas para completarlas con los botones que activan las acciones.

Sé que querías un menú emergente, pero hasta donde yo sé, ese es el alcance de lo que puedes hacer con QT Designer. Parece que varios otros han llegado a la misma conclusión.


Hay un truco incómodo para esto. Puede colocar los widgets deseados en un QWidget especial (o, por ejemplo, QFrame ) en Qt Designer y agregar ese widget a la barra de herramientas en el código.

Agregue para proyectar una nueva clase Qt nombrada, por ejemplo QMyToolbarItem , derivada de QWidget (o lo que sea). A continuación, abra QMyToolbarItem.ui en Qt designer. Agregue los widgets complejos a él. Puede utilizar QComboBox o botones emergentes para el menú emergente. (Ya mencioné que esto es incómodo). Guárdalo En el código, solo necesita agregar el widget personalizado a la barra de herramientas de QMainWindow :

ui.mainToolBar->addWidget(new QMyToolbarItem(this));

No olvide establecer las políticas de tamaño de QMyToolbarItem correctamente (por ejemplo, establezca el minimumSize de QMyToolbarItem en un valor deseado). De lo contrario, no se muestra nada en la barra de herramientas.

Por supuesto, esto está bien solo cuando no se desean agregar elementos normales a la barra de herramientas. Tenga en cuenta que al hacerlo, pierde la gran potencia del modelo QAction.

De todos modos, es bastante razonable separar la interfaz de usuario del diseño de cosas del código, y le da una buena potencia sobre el diseño complejo de widgets en la barra de herramientas.

Por último, no se olvide de considerar los patrones apropiados de la Vista del modelo para separar de manera eficiente la lógica de la interfaz de usuario de la lógica empresarial subyacente, si es que todavía no lo hizo.