2011-11-17 27 views
9

Esto puede parecer una pregunta muy extraña, pero ¿es posible generar un formulario Qt Designer (.ui) desde un objeto Qt, digamos algo que herede QWidget?Qt object/class to Qt ui file

Mi plan es crear un formulario dinámico simple en el código, ya que el usuario elige qué cosas quieren, por ejemplo, campos, tipo de control y luego descarga un archivo .ui para que puedan modificar el diseño si es necesario.

El código utilizará la clase QUiLoader para volver a cargar el archivo ui y mostrar el archivo ui modificado o no.

+1

Me encantaría tener esa facilidad, para convertir masas de código de creación de widgets hechos a mano pre-Qt-Designer en archivos .ui. Lo pregunté hace años - de un desarrollador de Qt, creo - y la respuesta fue 'no'. Me encantaría saber si es posible desde entonces. –

+0

Este tema se debatió en marzo de 2011 en una [publicación del foro del Centro Qt] (http://www.qtcentre.org/threads/39911-How-to-create-.ui-file-from-hand-written-header- and-source-files-only). Una persona dijo que podían hacer la conversión, por una tarifa, pero no se mencionó ninguna herramienta disponible. –

+0

@Clare Macrae: Percibo la publicación del foro Qt Center como un intento de analizar directamente los códigos fuente para producir un archivo .ui (estático) mientras que OP hizo hincapié en la dinámica de construir una forma simple a través de la interacción del usuario y persistir el resultado como un archivo .ui (¿un diseñador de formulario?). – menjaraz

Respuesta

-1

no de esa manera. Como recordará, UI-file es el código fuente para generar el código .cpp apropiado en compilet-me. Gui-loader es una parte del patrón de punto a implementación, que ayuda a reducir la cantidad de tiempo de compilación.

+0

Un archivo .ui es solo XML que describe una jerarquía de widgets. – Tyr

+0

sí. Pero, ¿cuál es su papel en el proceso de compilación? –

+0

Dado que la pregunta se relaciona con la carga de formularios dinámicamente con UiLoader, su función aquí es como un archivo de datos externo que se analiza para crear controles coincidentes en el tiempo de ejecución. – Tyr

1

Dado que QWidget hereda de QObject, obtiene toda la inspección dinámica de propiedades que proporciona QObject. QObjects (y QWidgets) también se organizan naturalmente en árboles (ver QObject :: parent y QObject :: children). Al seguir el árbol de widgets y obtener las propiedades de cada uno, puede generar un archivo xml .ui que contenga la información básica sobre cada control.

Resolver las conexiones señal/ranura de una forma preestablecida puede ser un poco más complicado, ya que no parece haber ninguna forma de obtener información sobre ellas además de QObject :: dumpObjectInfo, pero para el programa que describe En su pregunta, es bastante fácil seguirlos de otra forma.

0

Permítanme aclarar algo, Qt Designer tiene una interfaz de usuario WYSIWYG que crea un formulario Qt Designer en formato xml, que luego se convierte a código C++ en tiempo de compilación. ¿Y estás preguntando si uno puede hacer esto al revés?

Sí, creo que es posible, ya que las Qt Designer Forms son solo xml de todos modos. Puede crear una aplicación que acepte código C++, específicamente el código utilizado para la declaración completa de una clase, luego traduzca las PROPIEDADES de la clase en su código xml correspondiente. Esto implicaría mucho trabajo, en el cual en ese momento, personalmente ya no veo el punto.

editar: este proyecto requeriría la ingeniería inversa de Qt Designer. pero sí, es muy posible.

2

El Qt-introspección herramienta GammaRay puede salvar diálogos de la AUI (solicitud en virtud de Inspección) a .ui archivos en su última versión, IIRC.