Diferencias y opciones entre la ventana principal y el cuadro de diálogo de QT
Los widgets creados siempre están ocultos y los widgets pueden contener otros widgets. Los widgets Qt emiten señales cuando hay operaciones del usuario o cambios de estado. Las señales se pueden conectar a funciones de ranura para que cuando se emita la señal, se llame automáticamente a la función de ranura correspondiente.
El constructor de la clase QWidget toma como argumento un puntero QWidget * a su widget principal (el valor predeterminado es 0, es decir, no hay ningún widget principal). Cuando se elimina un widget principal, Qt elimina automáticamente todos sus widgets secundarios.
Hay tres clases de administrador de diseño en Qt:
El patrón básico es agregar un widget al diseño y luego el diseño se hace cargo automáticamente del widget. El diseño adopta automáticamente el tamaño y la posición de los widgets.
El estilo explícito predeterminado de un programa Qt se puede cambiar usando el parámetro -style al iniciar el programa. Capítulo 2 Creación de cuadros de diálogo 2.1 Subclases de cuadros de diálogo
La clase base de todos los cuadros de diálogo en Qt es QDialog, que se deriva de QWidget.
Todas las clases en Qt que definen señales o ranuras usan Q_OBJECT al comienzo de la definición de clase, por lo que se debe usar la macro Q_OBJECT. De manera similar, la palabra clave slot también es una definición macro.
Las clases proporcionadas por Qt están organizadas en módulos: QtGui, QtNetWork, QtOpenGL, QtSql, QtSvg y QtXml. La función QObject::tr() convierte una cadena de entrada a otro idioma (internacionalización). Es una buena práctica utilizar la función tr() para todas las cadenas visibles para el usuario.
Amigos: dos widgets A y B. Si A tiene una tecla de acceso directo, y cuando el usuario presiona la tecla de acceso directo, el foco de entrada del programa cambia automáticamente a B, entonces se puede decir que B es amigo de A.
QWidget::close() es una ranura cuyo comportamiento predeterminado es hacer invisible el widget correspondiente ocultándolo al usuario, pero no elimina el widget. Los diseños pueden contener widgets y otros diseños, y se pueden crear cuadros de diálogo muy complejos anidando QHBoxLayOut, QVBoxLayOut y
QGridLayOut. Vale la pena señalar que la clase de administrador de diseño no es un widget. De hecho, deriva de QLayout, que deriva de QObject.
QWidget::sizeHint() devuelve el tamaño ideal del widget(). La palabra clave emit es específica de Qt y se utiliza para generar señales.
wk_ad_begin({pid: 21}); wk_ad_after(21, función(){$('.ad-hidden').hide();}, función(){$('.ad- oculto' ).show();});
MOC (compilador de metaobjetos): todas las clases que utilizan la macro Q_OBJECT deben procesarse a través del MOC en el momento de la compilación; de lo contrario, se producirán errores de enlace. La solución a este error también es muy simple: vuelva a ejecutar qmake para actualizar el archivo MAKE y luego vuelva a compilar.
2.2 Comprensión profunda de señales y ranuras El mecanismo de señal y ranura es la base de Qt.
Slot es casi idéntica a una función miembro de clase C ordinaria; puede ser virtual, sobrecargada, pública, protegida o privada, y también puede ser llamada directamente por otras funciones miembro.
La asociación entre señal y slot puede ser uno a uno, uno a muchos o muchos a uno.
Señal y señal también se pueden relacionar entre sí. La diferencia con signal-slot es que cuando se emite la primera señal, también se emitirá la segunda.
La señal y la ranura se pueden disociar llamando a desconectar(), generalmente sin una llamada explícita. Rara vez es necesario llamar a desconectar() explícitamente porque Qt elimina automáticamente la asociación cuando se elimina el objeto.
Una asociación (como señal-ranura o señal-señal) requiere que ambas tengan la misma lista de parámetros; si la señal tiene más parámetros que la ranura, los parámetros adicionales se ignoran.
Si cree que el mecanismo de señal y ranura solo se puede usar para componentes, entonces el mecanismo de señal y ranura en realidad lo implementa QObject y no se limita a la programación GUI. Puede usarse para cualquier subclase de QObject. .
2.3 Diseño de diálogo rápido
Los formularios creados con Qt Designer eventualmente se convertirán a código C.
La herramienta qmake detecta archivos de interfaz (archivos *.ui) y llama al compilador de interfaz de usuario de Qt, uic. uic convierte el archivo .ui en código C y lo almacena en un archivo del formato ui_xxx.h. Este archivo proporciona la definición completa de la clase correspondiente para el cuadro de diálogo y contiene una función miembro setupUi() para inicializar el formulario.
Tenga en cuenta que las clases creadas por uic no se derivan de ninguna clase Qt.
El mecanismo padre-hijo de Qt lo implementa QObject. Si se especifica un padre cuando se crea el objeto, el padre agrega el objeto a su lista de objetos secundarios, y cuando se elimina el padre, Qt recorre en iteración la lista de objetos secundarios y elimina cada hijo de forma recursiva. Este mecanismo simplifica enormemente la gestión de la memoria y reduce el riesgo de pérdidas de memoria: el programador sólo tiene que eliminar explícitamente los objetos creados por new que no tienen padre.
Para los widgets, el widget principal tiene un significado adicional: el widget chidl se mostrará dentro del alcance del widget principal. Si se elimina el widget principal, el widget secundario no solo se libera de la memoria sino que también desaparece de la pantalla.
QDialog::accept() establece el valor de retorno del cuadro de diálogo en QDialog::Accepted (valor 1), mientras que QDialog::reject() establece el valor de retorno en QDIalog::Rejected (valor 0 ).
2.5 Cuadro de diálogo dinámico
El cuadro de diálogo dinámico se refiere al cuadro de diálogo creado en base al archivo .ui cuando el programa se está ejecutando. En lugar de convertir .ui a código C a través de uic, dichos cuadros de diálogo utilizan la clase QUiLoader para cargar el archivo .ui en tiempo de ejecución.
Puedes acceder a los widgets secundarios de un formulario usando QObject::findChildlt;Tgt;().
Para usar QUiLoader, necesita agregar el siguiente contenido al archivo .pro de su programa Qt: CONFIG = uitools Diálogo dinámico Permite cambiar el diseño del formulario sin volver a compilar el programa.
Capítulo 3 Creación de la ventana principal 3.1 Subclases de QMainWindow
La ventana principal de la aplicación se puede implementar creando una clase derivada de QMainWindow, como QDialog, que se deriva de QWidget.
setCentralWidget() establece un widget como el widget central de la ventana principal, lo que significa que ocupará la posición central de la ventana principal cuando se muestre.
La programación GUI bajo Qt admite múltiples formatos gráficos. Las imágenes se pueden proporcionar a las aplicaciones de diversas formas, las más comunes son 1). Almacenar la imagen en un archivo y cargarla en tiempo de ejecución.
2). Incluir archivos XPM en el código fuente (los archivos XPM también son archivos C legales). 3).Utilice el mecanismo de recursos de Qt.
El mecanismo de recursos de Qt es más conveniente que la carga en tiempo de ejecución y funciona perfectamente con todos los formatos de imagen compatibles.
Para utilizar el mecanismo de recursos de Qt, necesita crear un archivo de recursos y agregar una línea al archivo .pro para identificar el archivo de recursos. Por ejemplo:
RESOURCES = spreadsheet.qrc
El archivo de recursos en sí está en formato XML simple. Se compila en el ejecutable del programa para que no se pueda perder. Al localizar recursos, utilice el prefijo de ruta ":/", por ejemplo ":/images/icon.png". El recurso en sí puede ser cualquier tipo de archivo.
3.2 Crear menús y barras de herramientas
Qt simplifica la programación de menús y barras de herramientas introduciendo el concepto de operaciones. Se puede agregar una acción a cualquier número de menús y barras de herramientas.
Programar menús y barras de herramientas en Qt implica tres pasos: 1) Crear y configurar acciones
2) Crear menús y agregarles acciones 3). it
La creación de Action se realiza a través de la clase QAction. Para cada acción, puede establecer propiedades para el acelerador, padre, acelerador, visibilidad y mensajes de estado. También puede configurar las propiedades de la acción llamando a connect() para configurar la acción para activar la acción.
QAbstraceItemView, la clase base de QTableWidget, proporciona la ranura selectAll().
La clase QApplication proporciona la ranura aboutQt(), que se puede utilizar a través de la variable global qApp (puntero de tipo QApplication *)).