Desarrollo de ventanas Qt MDI

Qt Mdi Window Development


Notas de lanzamiento

versión Autor fecha Observaciones
0.1 salario 2018.11.2 Primer borrador

Tabla de contenido

Directorio de artículos

Primero, el análisis de la demanda

Necesitamos hacer un software de configuración similar a la siguiente estructura, analizar su estructura básica y encontrar que necesitamos MDI Window como el marco principal de UI, por lo que necesitamos entender la programación de aplicaciones Qt MDI Window.

imagen



En segundo lugar, ¿qué es la ventana MDI?

MDI es la abreviatura de Multiple Document Interface, que es una interfaz de múltiples documentos. En el desarrollo de VC ++, si usa MFC, cuando crea un proyecto, generalmente guiará al usuario a seleccionar un formulario de documento único o un formulario de documento múltiple. MDI es una interfaz de programación que Microsoft proporciona para que los desarrolladores creen varios documentos simultáneamente. El llamado Documento es equivalente a un hilo, que maneja transacciones específicas en su propio espacio. Los usuarios pueden ver o completar la creación de informes digitales, la edición de texto o el dibujo, simplemente moviendo el mouse de un espacio a otro. Una aplicación MDI es similar a la interfaz de escritorio de Windows y contiene múltiples vistas, que son lo que a menudo llamamos en MFC. Sin embargo, a diferencia de la interfaz de escritorio de Windows, el espacio de visualización de MDI está limitado a esta aplicación. MDI se usa ampliamente para pasar valores entre múltiples formularios, mientras visualiza diferentes representaciones de los mismos datos y luego abre múltiples páginas web al mismo tiempo en un navegador. En resumen, se utilizan múltiples interfaces de documentos en situaciones en las que se deben procesar múltiples transacciones simultáneamente. De hecho, similar a la computación paralela que solemos decir, ¡es solo una forma diferente de expresión!



Una aplicación MDI consta de al menos dos ventanas distintas. La primera ventana se denomina contenedor MDI y la ventana que se puede mostrar en el contenedor se denomina ventana secundaria MDI.



Qt también es compatible con MDI Window. Puede encontrar contenido relacionado buscando directamente MDI, incluidos QMdiArea y QMdiSubWindow, donde QMdiArea es el contenedor MDI y QMdiSubWindow es la ventana secundaria MDI.

En tercer lugar, introducción a la clase Qt relacionada con MDI

Como se mencionó anteriormente, la programación MDI de Qt incluye dos categorías principales: QMdiArea y QMdiSubWindow, QMdiArea proporciona un contenedor y QMdiSubWindow proporciona una ventana secundaria. La programación de QMdiArea se deriva de Qt 4.4, por lo que debe ser Qt4.4 o superior.

Busque MDI directamente en el manual de ayuda para encontrar contenido relevante:
imagen



1 、 QMdiArea

El widget QMdiArea proporciona un área para mostrar la ventana MDI.

La función QMdiArea es esencialmente similar al administrador de ventanas de una ventana MDI. Por ejemplo, dibuja sus propias ventanas administradas y las organiza en modo en cascada o en mosaico. QMdiArea se usa a menudo como un widget central en QMainWindow para crear aplicaciones MDI, pero también se puede colocar en cualquier diseño. El siguiente código agrega un área a la ventana principal:

|_+_|

A diferencia de los administradores de ventanas para ventanas de nivel superior, QMdiArea admite todos los indicadores de ventana (Qt :: WindowFlags) siempre que sean compatibles con el estilo de widget actual. Si el estilo no admite un indicador específico (por ejemplo, WindowShadeButtonHint), aún puede sombrear la ventana con showshade ().

La ventana secundaria en QMdiArea es una instancia de QMdiSubWindow. Se agregan al área MDI con addSubWindow (). Es común pasar un conjunto de QWidget como un widget interno a esta función, pero también puede pasar QMdiSubWindow directamente. La clase hereda de QWidget y puede usar la misma API que una ventana normal de nivel superior al programar. QMdiSubWindow también tiene un comportamiento específico para las ventanas MDI. Consulte la descripción de la clase QMdiSubWindow para obtener más detalles.

La ventana secundaria se activa cuando se enfoca en el teclado o llama a setFocus (). El usuario mueve el foco de la forma habitual para activar la ventana. El área MDI emite una señal de activación de ventana secundaria () cuando cambia la ventana activa, y la función activeSubWindow () devuelve la ventana secundaria activa.

La función de conveniencia subWindowList () devuelve una lista de todas las ventanas secundarias. Por ejemplo, puede utilizar esta información en un menú emergente que contiene una lista de ventanas.

Las ventanas secundarias se ordenan en el orden de ventanas actual. Esto se usa para listas de ventanas secundarias () y activeNextSubWindow () y activePreviousSubWindow (). De manera similar, se puede usar al colocar ventanas en cascada o en mosaico con cascadeSubWindows () y tileSubWindows ().

QMdiArea proporciona dos estrategias de diseño integradas para las ventanas secundarias: cascadeSubWindows () y tileSubWindows (). Ambas son ranuras y es fácil conectarse a los elementos del menú.

Nota: La propiedad de la barra de desplazamiento predeterminada de QMdiArea es Qt :: ScrollBarAlwaysOff.

Esta es la introducción del uso de QMdiArea, API específica aquí no hay mucho que decir, puede combinar el ejemplo de MDI dado para ver cómo llamar y luego mirar las funciones de API correspondientes en el código de ejemplo.

2 、 QMdiSubWindow

Busque directamente QMdiSubWindow, puede encontrar una descripción de toda la clase y los métodos y propiedades correspondientes.

imagen

La clase QMdiSubWindow proporciona una clase de ventana secundaria para QMdiArea.

QMdiSubWindow representa la ventana de nivel superior en QMdiArea, que consta de una barra de título con decoraciones de ventana, widgets internos y (según el estilo actual) marco y tiradores de tamaño. QMdiSubWindow tiene su propio diseño, que consta de la barra de título y el área central del widget interno.

La forma más común de construir QMdiSubWindow es llamar a QMdiArea :: addSubWindow () con el widget interno como parámetro. También puede crear ventanas secundarias usted mismo y configurar widgets internos llamando a setWidget ().

Al programar una ventana secundaria, puede usar la misma API que una ventana normal de nivel superior (por ejemplo, puede llamar a funciones como show (), hide (), showMaximized () y setWindowTitle ()).

QMdiSubWindow también admite el comportamiento específico de subventanas en regiones MDI.

De forma predeterminada, cada QMdiSubWindow está visible en la vista del área MDI, pero también puede especificar el comportamiento del movimiento y cambio de tamaño de la ventana transparente, en el que solo se actualiza el contorno de la ventana secundaria. La función setOption () se utiliza para habilitar este comportamiento.

La función isShaded () se usa para detectar si la ventana secundaria está coloreada actualmente. (Es decir, la ventana está contraída, por lo que solo se ve la barra de título). Para ingresar al modo de sombra, llame a showshade (). QMdiSubWindow emite una señal windowStateChanged () cuando cambia el estado de la ventana (por ejemplo, cuando la ventana se minimiza o restaura). También emitirá aboutToActivate () antes de ser activado.

En el modo interactivo de teclado, el teclado mueve y cambia el tamaño de la ventana. Puede acceder a este modo a través del menú del sistema de la ventana. Las propiedades keyboardSingleStep y keyboardPageStep controlan hasta dónde se mueve o cambia el tamaño del widget para cada evento de tecla. Use el paso de página cuando se presione la tecla de mayúsculas; de lo contrario, use un solo paso.

También puede cambiar la ventana activa usando el teclado. Al presionar las teclas de control y tabulación simultáneamente, se activará la siguiente subventana (usando el WindowOrder actual). Al presionar control, shift y tab, activará la ventana anterior. Esto es equivalente a llamar a activeNextSubWindow () y activePreviousSubWindow (). Tenga en cuenta que estos atajos anulan los atajos globales pero no anulan el atajo QMdiAreas.

La API específica no se explicará una por una. Echemos un vistazo al ejemplo que viene con Qt.

Cuarto, ejemplo de MDI Qt

Busque MDI directamente en el ejemplo, busque el ejemplo correspondiente, luego configure y compile, el resultado es el siguiente (abrí dos ventanas y las dejé en mosaico):

imagen

A continuación, encontramos el ejemplo de MDI en el manual de ayuda:

imagen

Puede ver los recursos de imágenes y archivos incluidos en este ejemplo.

La descripción simplemente puso el código, y no especificó, pero aún miramos la división de acuerdo con la forma anterior: mainwindow, mdichild, main, mdi, y luego miramos lo que se debe agregar en el pro, qrc cómo agregar recursos Archivo. La función de la barra de herramientas correspondiente se proporciona en la ventana de maindow, y las funciones requeridas por la barra de herramientas en el mdichild se implementan en las subventanas correspondientes, y el nivel sigue siendo muy claro. En la estructura de la ventana principal, newFile, destructor y otros métodos, la llamada a la API de programación Qt MDI no es difícil.

Quinto, el último

El uso de lo básico no es difícil, principalmente basado en la realización de las funciones que necesitamos, como por ejemplo, cómo asociar los datos en las dos ventanas, además de la disposición del mosaico, si puede ser disposición vertical, etc. can Esto se basa en un procesamiento flexible.