QT Tutorial-1.1 Introducción a Qt

1. Descripción general de Qt

1.1 Características de Qt

  • Es un marco de desarrollo de aplicaciones C ++ multiplataforma.
    • Tiene las excelentes características de corto, plano y rápido: menos inversión, ciclo corto, efecto rápido, alta eficiencia.
    • Admite casi todas las plataformas, se puede utilizar para el desarrollo de programas de escritorio y el desarrollo integrado
    • Tiene su propio mecanismo de manejo de eventos.
  • Qt es una extensión del estándar C ++, y la sintaxis de C ++ es compatible con Qt
    • Un buen mecanismo de encapsulación hace que Qt tenga un alto grado de modularidad, buena reutilización y un inicio rápido.
    • Qt proporciona un tipo seguro llamado señales / ranuras para reemplazar la devolución de llamada, lo que hace que sea muy fácil trabajar juntos entre varios componentes.
  • Se usa ampliamente para desarrollar programas GUI y también se puede usar para desarrollar programas sin GUI.
  • graphical user interface
  • API enriquecida
    • Qt incluye más de 250 clases de C ++
    • Puede manejar expresiones regulares.
  • Admite renderizado de gráficos 2D / 3D, admite OpenGL
  • Qt proporciona documentos oficiales muy detallados al programador
  • Soporte XML, Json
  • La parte inferior del marco es modular, los usuarios pueden elegir el módulo correspondiente para usar de acuerdo con sus necesidades

1.2 Módulos en Qt

Un gran número de clases en la biblioteca de clases Qt se dividen en varios módulos de acuerdo con sus funciones. Estos módulos se dividen a su vez en las siguientes categorías:

  • Qt Essentials: proporciona las funciones básicas de Qt en todas las plataformas.
  • Qt Add-Ons: módulo que implementa algunas funciones específicas y aporta valor añadido.
  • Value-AddModules: módulos o herramientas lanzados por separado que proporcionan valor adicional.
  • Módulos de vista previa de tecnología: algunos módulos que se encuentran en la etapa de desarrollo, pero que se pueden utilizar como avances de tecnología.
  • Qt Tools (Qt Tools): algunas herramientas para ayudar al desarrollo de aplicaciones.

Puede ver la información de todos estos módulos en el sitio web oficial de Qt o en la página "Todos los módulos" del documento de ayuda. La siguiente es la descripción oficial de los módulos básicos de Qt. Si está interesado en otros módulos, puede comprobarlo usted mismo.

Módulo descripción
Qt Core El núcleo de la biblioteca Qt, todos los demás módulos dependen de este módulo
Qt GUI Clases básicas para diseñar interfaces GUI, incluido OpenGL
Qt Multimedia Funciones de audio, video, cámara y transmisión
Widgets multimedia Qt Clases de componentes de interfaz que implementan funciones multimedia
Red de Qt Clases que facilitan y simplifican la programación en red
Qt QML Clases para lenguajes QML y JavaScript
Qt Rápido Marco declarativo para crear aplicaciones dinámicas con interfaces de usuario personalizadas
Controles rápidos Qt Cree una interfaz de usuario de estilo de escritorio, basada en los controles de la interfaz de usuario de Qt Quick
Cuadros de diálogo rápidos de Qt Tipo de diálogo del sistema utilizado para Qt Quick
Diseños rápidos de Qt Elementos de diseño para los elementos de la interfaz Qt Quick 2
Qt SQL Clases que usan SQL para operaciones de bases de datos
Prueba de Qt Clases para pruebas unitarias de aplicaciones y bibliotecas
Qt Widgets Clase de componente gráfico C ++ para crear una interfaz gráfica de usuario

Caja de 1.3 Qt

  • VirtualBox: Software de máquina virtual.
  • VLC多媒体播放器: Un reproductor multimedia de código abierto pequeño y potente.
  • YY语音: También conocido como "YaiYai Voice", es un software gratuito para charlas de voz y conferencias de voz en línea entre varias personas.
  • 咪咕音乐: Migu Music es un reproductor de música genuino creado por China Mobile
  • WPS Office: El software de Office producido por Kingsoft tiene buena compatibilidad con Microsoft Office y la versión personal es gratuita.
  • Skype: Un software de chat VOIP basado en P2P con una gran cantidad de usuarios.

2. Instalación

Qt下载地址:
https://download.qt.io/archive/qt/
本教程基于Window平台 Qt 5.14.2 给大家讲解如何进行安装和相关配置.


2.1 Pasos de instalación





Inserte la descripción de la imagen aquí

Si es la versión Qt5.13.2, la interfaz es así

  • MSVC2015 de 64 bits: kit de compilación de 64 bits utilizado por Visual Studio 2015

  • MSVC2017 de 32 bits: kit de compilación de 32 bits utilizado por Visual Studio 2017

  • MSVC2017 de 64 bits: kit de compilación de 64 bits utilizado por Visual Studio 2017

  • MinGW7.3.0 32 bits: kit de compilación de 32 bits utilizado por QtCreator

  • MinGW7.3.0 64 bits: kit de compilación de 64 bits utilizado por QtCreator

  • UWP -> Plataforma universal de Windows: conjunto de compiladores para el desarrollo de aplicaciones de plataforma de ventanas

    La plataforma de aplicaciones de Windows que es común en Windows 10 Mobile/ Surface(Windows平板电脑)/ PC/ Xbox/ HoloLensen otras plataformas se ejecutan, la aplicación uwp exe es diferente de la PC tradicional, también ahora se aplica solo al lado del teléfono de la aplicación y son esencialmente diferentes. No está diseñado para un terminal determinado, pero puede ejecutarse en todos los dispositivos con Windows 10

  • Fuente: código fuente de Qt, algunos de los controladores necesarios para el funcionamiento de los módulos Qt no proporcionan bibliotecas dinámicas listas para usar y deben ser compilados por usted mismo, se recomienda instalar

  • Gráficos Qt: se utilizan para dibujar gráficos correspondientes a datos estadísticos, como: gráfico de líneas / gráfico de curvas, etc.



Solo elijo instalar MinGW7.3.0 32-bity las Sourcedos partes, inicio el asistente de instalación, este proceso lleva una larga espera


Inserte la descripción de la imagen aquí




2.2 Configuración de variables de entorno

  1. Busque el icono Mi PC (esta computadora) en el escritorio, haga clic con el botón derecho del mouse y abra la ventana de propiedades


  1. Seleccione "Configuración avanzada del sistema" en la ventana de propiedades

  1. Abra la ventana de variables de entorno

  1. Nueva variable de entorno

  1. Agregue los directorios relevantes de Qt a las variables de entorno del sistema

    • Descripción de la variable de entorno:

      • Busque el directorio de instalación de Qt: D:

      • Busque el directorio bin de la biblioteca Qt en el directorio de instalación: D:\Software\Qt5.13.2\5.13.2\mingw73_64\bin

      • Busque el directorio bin de la suite compilada en el directorio de instalación: D:\Software\Qt5.13.2\Tools\mingw730_64\bin

2,3 QtCreator

  1. QtCreator es un IDE que se usa por defecto al escribir programas Qt. También es posible usar VS para escribir programas Qt, así que no lo presentaré aquí.

  2. El directorio del proyecto creado con QtCreator no puede contener chino

  3. QtCreator usa codificación de formato Utf8 para codificar caracteres de archivo de forma predeterminada

    • 字符必须编码后才能被计算机处理

    • Para procesar caracteres chinos, los programadores diseñaron GB2312 para chino simplificado y big5 para chino tradicional.

    • GB2312 admite muy pocos caracteres chinos. La especificación de expansión de caracteres chinos GBK1.0 en 1995 admite más caracteres chinos.

    • En 2000, GB18030 reemplazó a GBK1.0 y se convirtió en el estándar nacional oficial.

    • Unicode también es un método de codificación de caracteres, pero está diseñado por una organización internacional y puede adaptarse a esquemas de codificación para todos los idiomas del mundo.

      • utf8
      • utf16
    • vs Escribe la codificación local predeterminada utilizada por los programas Qt -> gbk

    • Modificar la codificación de QtCreator

  • Introducción a la interfaz principal de QtCreator

    • Kit de compilación predeterminado

      MinGW -> Minimalist GNU for Windows

      • MinGW proporciona un entorno de desarrollo de programas basado en GCC simple y conveniente en Windows. MinGW ha recopilado una serie de archivos de encabezado y archivos de biblioteca gratuitos utilizados por Windows;
      • Integra conjuntos de herramientas GNU (http://www.gnu.org/), especialmente herramientas de desarrollo de programas GNU, como gcc clásico, g ++, make, etc.
      • MinGW es un software completamente gratuito. Simula el entorno de desarrollo de GCC bajo Linux en la plataforma Windows y proporciona un buen soporte básico para el desarrollo multiplataforma de C ++. Se proporciona para que los programadores que trabajan en Windows estén familiarizados con la organización de ingeniería C ++. en Linux. Condición.

3. Crea el primer proyecto Qt

3.1 Crear un proyecto


  • El nombre del proyecto puede ser especificado por usted mismo según las necesidades.
  • 在指定项目的存储路径的时候, 路径中不能包含中文, 不能包含中文, 不能包含中文


  • El kit de compilación se utiliza para compilar los archivos del proyecto. Si hay varios kits de compilación instalados, simplemente seleccione uno de ellos aquí

3.2 Proyecto file.pro

# 在项目文件中, 注释需要使用 井号(#)
# 项目编译的时候需要加载哪些底层模块
QT       += core gui 

# 如果当前Qt版本大于4, 会添加一个额外的模块: widgets
# Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
   
# 使用c++11新特性
CONFIG += c++11	

#如果在项目中调用了废弃的函数, 项目编译的时候会有警告的提示    
DEFINES += QT_DEPRECATED_WARNINGS

# 项目中的源文件
SOURCES += \
        main.cpp \
        mainwindow.cpp
        
# 项目中的头文件
HEADERS += \
        mainwindow.h
        
# 项目中的窗口界面文件
FORMS += \
        mainwindow.ui

3.3 Otros documentos

  • main.cpp

    #include "mainwindow.h"		// 生成的窗口类头文件
    #include <QApplication>		// 应用程序类头文件
    
    int main(int argc, char *argv[])
    {
          
          
        // 创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个
        // 类的作用: 检测触发的事件, 进行事件循环并处理
        QApplication a(argc, argv);
        // 创建窗口类对象
        MainWindow w;
        // 显示窗口
        w.show();
        // 应用程序对象开始事件循环, 保证应用程序不退出
        return a.exec();
    }
    
  • mainwindow.ui

    <!-- 双击这个文件看到的是一个窗口界面, 如果使用文本编辑器打开看到的是一个XML格式的文件 -->
    <!-- 看不懂这种格式没关系, 我们不需要在这种模式下操作这个文件, 这里只是给大家介绍这个文件的本质 -->
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget"/>
      <widget class="QMenuBar" name="menubar"/>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
  • mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>		// Qt标准窗口类头文件
    
    QT_BEGIN_NAMESPACE
    // mainwindow.ui 文件中也有一个类叫 MainWindow, 将这个类放到命名空间 Ui 中
    namespace Ui {
          
           class MainWindow; }	
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
          
          
        Q_OBJECT	// 这个宏是为了能够使用Qt中的信号槽机制
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;		// 定义指针指向窗口的 UI 对象
    };
    #endif // MAINWINDOW_H
    
  • mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)	// 基于mainwindow.ui创建一个实例对象
    {
        // 将 mainwindow.ui 的实例对象和 当前类的对象进行关联
        // 这样同名的连个类对象就产生了关联, 合二为一了
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    

4. La clase de ventana en Qt

En el penúltimo paso hacemos elegimos seguir la primera ventana creada por el proyecto durante la aplicación de Qt ventana del asistente de proyecto de la clase de base de la ventana, el menú desplegable con tres opciones, a saber: QMainWindow, QDialog, QWidgetcomo se muestra a continuación:

4.1 Clase de ventana básica

  • Hay 3 clases de ventanas de uso común
    • Al crear una ventana Qt, debe hacer que su propia clase de ventana herede una de las tres clases de ventana anteriores
  • QWidget
    • La clase base de todas las clases de ventana.
    • Los controles en Qt (botones, cuadros de entrada, botones de radio ...) también pertenecen a Windows, y sus clases base sonQWidget
    • Se puede incrustar en otras ventanas: sin borde
    • Se puede mostrar por separado sin incrustado: ventana independiente, con borde
  • QDialog
    • Clase de diálogo, los siguientes capítulos presentarán esta ventana en detalle
    • No se puede incrustar en otras ventanas
  • QMainWindow
    • Hay barra de herramientas, barra de estado, barra de menú, los siguientes capítulos presentarán esta ventana en detalle
    • No se puede incrustar en otras ventanas

4.2 Visualización de la ventana

  • Ventana en línea

    • Unido a una ventana grande, como parte de la ventana grande
    • La ventana grande es la ventana principal de esta ventana incrustada
    • 父窗口显示的时候, 内嵌的窗口也就被显示出来了
  • No incrustar ventanas

    • Este tipo de ventana tiene un borde y una barra de título.

    • Necesita llamar a la función para mostrar

      // QWidget是所有窗口类的基类, 调用这个提供的 show() 方法就可以显示将任何窗口显示出来
      // 非模态显示
      void QWidget::show();	// 显示当前窗口和它的子窗口
      
      // 对话框窗口的非模态显示: 还是调用show() 方法
      // 对话框窗口的模态显示
      [virtual slot] int QDialog::exec();
      

5. Sistema de coordenadas de Qt

5.1 El origen de coordenadas de la ventana

Qt的坐标原点在窗口的左上角

  • el eje x aumenta hacia la derecha
  • el eje y aumenta hacia abajo

5.2 Coordenadas relativas de la ventana

  • Puede haber varios controles en una determinada ventana de Qt, y estos controles están todos en una relación anidada

    • La ventana A contiene la ventana B, la ventana B contiene la ventana C
  • Cada ventana tiene un origen de coordenadas, en la esquina superior izquierda

    • La posición de la ventana secundaria se determina en función del sistema de coordenadas de la ventana principal, es decir, su posición está determinada por el punto de coordenadas en la esquina superior izquierda de la ventana principal.
  • Las coordenadas relativas utilizadas cuando la ventana se muestra en Qt, en relación con su ventana principal

  • Mueva la ventana secundaria a una determinada posición de la ventana principal

    // 所有窗口类的基类: QWidget
    // QWidget中提供了移动窗口的 API函数
    // 参数 x, y是要移动的窗口的左上角的点, 窗口的左上角移动到这个坐标点
    void move(int x, int y);
    void move(const QPoint &);
    
    

6. Mecanismo de reciclaje de memoria en Qt

Al crear un objeto en Qt, se le proporcionará Parent对象指针uno (puede ver el constructor de la clase) Vamos a explicar lo que hace el padre.

QObject está organizado en forma de árbol de objetos. 当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是 parent,也就是父对象指针. Esto es equivalente a proporcionar un objeto padre al crear un objeto QObject, y el objeto QObject que creamos se agregará automáticamente a la lista children () de su objeto padre. Cuando se destruye el objeto principal, también se destruirán todos los objetos de esta lista. (Atención, 这里的父对象并不是继承意义上的父类!)

QWidget es la clase principal de todos los componentes que se pueden mostrar en la pantalla. QWidget hereda de QObject, por lo que también hereda esta relación de árbol de objetos. Un niño se convierte automáticamente en un componente secundario del componente principal. Por lo tanto, se mostrará en el sistema de coordenadas del componente principal y se recortará por el límite del componente principal. Por ejemplo, cuando el usuario cierra un cuadro de diálogo, la aplicación lo borra, luego esperamos que los botones, iconos, etc. que pertenecen a este cuadro de diálogo se eliminen juntos. Este es el caso, porque todos estos son subcomponentes del cuadro de diálogo.

Qt introduce el concepto de árbol de objetos, que resuelve hasta cierto punto el problema de la memoria.

  • Cuando se crea un objeto QObject en el montón, Qt también creará un árbol de objetos para él. Sin embargo, el orden de los objetos en el árbol de objetos no está definido. Esto significa que el orden en el que se destruyen estos objetos tampoco está definido.

  • Cuando se elimina cualquier objeto QObject en el árbol de objetos, si el objeto tiene un padre, se elimina automáticamente de la lista de hijos () del padre; si hay hijos, cada hijo se elimina automáticamente. Qt garantiza que ningún QObject será eliminado dos veces, lo que está determinado por el orden de destrucción.

En resumen, podemos sacar una conclusión: Qt中有内存回收机制, 但是不是所有被new出的对象被自动回收, 满足条件才可以回收si desea realizar la recuperación automática de memoria en Qt, debe cumplir las siguientes dos condiciones:

  • El objeto creado debe ser una subclase de la clase QObject (también son posibles las subclases indirectas)

    • La clase QObject no tiene una clase padre. Una gran parte de las clases en Qt se derivan de esta clase.

      • Las clases y controles de ventana que se utilizan con frecuencia en Qt son subclases directas o indirectas de QObject
      • Otras clases pueden consultar la documentación de ayuda de Qt por sí mismas.
  • Para el objeto de clase creado, debe especificar quién es su objeto principal. En general, hay dos formas de operación:

  // 方式1: 通过构造函数
  // parent: 当前窗口的父对象, 找构造函数中的 parent 参数即可
  QWidget::QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
  QTimer::QTimer(QObject *parent = nullptr);
  
  // 方式2: 通过setParent()方法
  // 假设这个控件没有在构造的时候指定符对象, 可以调用QWidget的api指定父窗口对象
void QWidget::setParent(QWidget *parent);
void QObject::setParent(QObject *parent);

Supongo que te gusta

Origin blog.csdn.net/qq_39400113/article/details/113253752
Recomendado
Clasificación