QT Tutorial-1.1 Introdução ao Qt

1. Visão geral do Qt

1.1 Recursos do Qt

  • É uma estrutura de desenvolvimento de aplicativos C ++ de plataforma cruzada
    • Possui excelentes características de curto, plano e rápido: menos investimento, ciclo curto, efeito rápido, alta eficiência
    • Suporta quase todas as plataformas, pode ser usado para desenvolvimento de programas de desktop e desenvolvimento embarcado
    • Tem seu próprio mecanismo de tratamento de eventos
  • Qt é uma extensão do C ++ padrão, e a sintaxe do C ++ é suportada no Qt
    • Um bom mecanismo de encapsulamento torna o Qt um alto grau de modularidade, boa capacidade de reutilização e início rápido.
    • O Qt fornece um tipo seguro chamado de sinais / slots para substituir o retorno de chamada, o que torna muito fácil trabalhar em conjunto entre vários componentes.
  • É amplamente usado para desenvolver programas GUI e também pode ser usado para desenvolver programas não GUI.
  • graphical user interface
  • API rica
    • Qt inclui mais de 250 classes C ++
    • Pode lidar com expressões regulares.
  • Suporta renderização de gráficos 2D / 3D, suporte OpenGL
  • Qt fornece documentos oficiais muito detalhados para o programador
  • Suporte XML, Json
  • A parte inferior da estrutura é modular, os usuários podem escolher o módulo correspondente para usar de acordo com suas necessidades

1.2 Módulos no Qt

Um grande número de classes na biblioteca de classes Qt são divididas em vários módulos de acordo com suas funções. Esses módulos são divididos nas seguintes categorias:

  • Qt Essentials: Fornece as funções básicas do Qt em todas as plataformas.
  • Add-Ons Qt: Um módulo que implementa algumas funções específicas e fornece valor agregado.
  • Value-AddModules: módulos ou ferramentas lançados separadamente que fornecem valor adicional.
  • Módulos de visualização de tecnologia: Alguns módulos que estão em estágio de desenvolvimento, mas podem ser usados ​​como visualizações de tecnologia.
  • Ferramentas Qt (Ferramentas Qt): Algumas ferramentas para ajudar no desenvolvimento de aplicativos.

Você pode ver as informações de todos esses módulos no site oficial do Qt ou na página "Todos os Módulos" do documento de ajuda. A seguir está a descrição oficial dos módulos básicos do Qt. Se você estiver interessado em outros módulos, pode verificar você mesmo.

Módulo Descrição
Qt Core O núcleo da biblioteca Qt, todos os outros módulos dependem deste módulo
Qt GUI Classes básicas para projetar interfaces GUI, incluindo OpenGL
Qt Multimedia Funções de áudio, vídeo, câmera e transmissão
Qt Multimedia Widgets Classes de componentes de interface que implementam funções multimídia
Rede Qt Aulas que tornam a programação de rede mais fácil e leve
Qt QML Aulas para linguagens QML e JavaScript
Qt Quick Estrutura declarativa para construir aplicativos dinâmicos com interfaces de usuário personalizadas
Qt Quick Controls Crie uma interface de usuário estilo desktop, com base nos controles de interface de usuário Qt Quick
Diálogos Qt Rápidos Tipo de diálogo do sistema usado para Qt Quick
Layouts rápidos do Qt Itens de layout para elementos de interface Qt Quick 2
Qt SQL Classes que usam SQL para operações de banco de dados
Teste Qt Aulas para teste de unidade de aplicativos e bibliotecas
Qt Widgets Classe de componente gráfico C ++ para construção de interface GUI

1.3 Qt case

  • VirtualBox: Software de máquina virtual.
  • VLC多媒体播放器: Um reprodutor de mídia de código aberto pequeno e poderoso.
  • YY语音: Também conhecido como "YaiYai Voice", é um software gratuito para bate-papo on-line com várias pessoas e conferência de voz.
  • 咪咕音乐: Migu Music é um reprodutor de música genuíno criado pela China Mobile
  • WPS Office: O software Office produzido pela Kingsoft tem boa compatibilidade com o Microsoft Office e a versão pessoal é gratuita.
  • Skype: Um software de chat VOIP baseado em P2P com um grande número de usuários.

2. Instalação

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


2.1 Etapas de instalação





Insira a descrição da imagem aqui

Se for a versão Qt5.13.2, a interface é assim

  • MSVC2015 64 bits: kit de compilação de 64 bits usado pelo Visual Studio 2015

  • MSVC2017 32 bits: kit de compilação de 32 bits usado pelo Visual Studio 2017

  • MSVC2017 64 bits: kit de compilação de 64 bits usado pelo Visual Studio 2017

  • MinGW7.3.0 32 bits: kit de compilação de 32 bits usado pelo QtCreator

  • MinGW7.3.0 64 bits: kit de compilação de 64 bits usado pelo QtCreator

  • UWP -> Plataforma Universal do Windows: Pacote de compiladores para desenvolvimento de aplicativos de plataforma de janela

    A plataforma de aplicativos do Windows que é comum em Windows 10 Mobile/ Surface(Windows平板电脑)/ PC/ Xbox/ HoloLensem outras plataformas executadas, o aplicativo uwp exe é diferente do pc tradicional, agora também se aplica apenas ao lado do telefone do aplicativo são essencialmente diferentes. Não foi projetado para um determinado terminal, mas pode ser executado em todos os dispositivos Windows 10

  • Fonte: código fonte Qt, alguns dos drivers necessários para a operação dos módulos Qt não fornecem bibliotecas dinâmicas prontas e precisam ser compilados por você mesmo, é recomendado instalar

  • Gráficos Qt: usados ​​para desenhar gráficos correspondentes a dados estatísticos, como: gráfico de linha / gráfico de curva, etc.



Eu apenas escolho instalar MinGW7.3.0 32-bite as Sourceduas partes, inicio o assistente de instalação, este processo leva uma longa espera


Insira a descrição da imagem aqui




2.2 Configurações de variáveis ​​de ambiente

  1. Encontre o ícone Meu Computador (este computador) na área de trabalho, clique com o botão direito do mouse e abra a janela de propriedades


  1. Selecione "Configurações avançadas do sistema" na janela de propriedades

  1. Abra a janela de variáveis ​​de ambiente

  1. Nova variável de ambiente

  1. Adicione os diretórios relevantes do Qt às variáveis ​​de ambiente do sistema

    • Descrição da variável de ambiente:

      • Encontre o diretório de instalação do Qt: D:

      • Encontre o diretório bin da biblioteca Qt no diretório de instalação: D:\Software\Qt5.13.2\5.13.2\mingw73_64\bin

      • Encontre o diretório bin do pacote compilado no diretório de instalação: D:\Software\Qt5.13.2\Tools\mingw730_64\bin

2.3 QtCreator

  1. QtCreator é um IDE usado por padrão ao escrever programas Qt. Também é possível usar o VS para escrever programas Qt, então não vou apresentá-lo aqui.

  2. O diretório do projeto criado com QtCreator não pode conter chinês

  3. O QtCreator usa a codificação no formato Utf8 para codificar os caracteres do arquivo por padrão

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

    • Para processar caracteres chineses, os programadores projetaram GB2312 para chinês simplificado e big5 para chinês tradicional.

    • GB2312 oferece suporte a poucos caracteres chineses. A especificação de expansão de caracteres chineses GBK1.0 em 1995 oferece suporte a mais caracteres chineses.

    • Em 2000, o GB18030 substituiu o GBK1.0 e se tornou o padrão nacional oficial.

    • Unicode também é um método de codificação de caracteres, mas foi desenvolvido por uma organização internacional e pode acomodar esquemas de codificação para todos os idiomas do mundo

      • utf8
      • utf16
    • vs Grava a codificação local padrão usada por programas Qt -> gbk

    • Modifique a codificação do QtCreator

  • Introdução à interface principal do QtCreator

    • Kit de compilação padrão

      MinGW -> Minimalist GNU for Windows

      • O MinGW fornece um ambiente de desenvolvimento de programa baseado em GCC simples e conveniente no Windows. O MinGW coletou uma série de arquivos de cabeçalho gratuitos e arquivos de biblioteca usados ​​pelo Windows;
      • Ele integra conjuntos de ferramentas GNU (http://www.gnu.org/), especialmente ferramentas de desenvolvimento de programas GNU, como gcc clássico, g ++, make, etc.
      • MinGW é um software totalmente gratuito. Ele simula o ambiente de desenvolvimento do GCC no Linux na plataforma Windows e fornece um bom suporte básico para o desenvolvimento de plataforma cruzada de C ++. Ele é fornecido para programadores trabalhando em Windows para se familiarizarem com a organização de engenharia C ++ no Linux. Condição.

3. Crie o primeiro projeto Qt

3.1 Criar um projeto


  • O nome do projeto pode ser especificado por você de acordo com as necessidades
  • 在指定项目的存储路径的时候, 路径中不能包含中文, 不能包含中文, 不能包含中文


  • O kit de compilação é usado para compilar os arquivos do projeto. Se vários kits de compilação estiverem instalados, basta selecionar um deles aqui

3.2 Arquivo de projeto.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 Outros 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. A classe da janela no Qt

No penúltimo passo fazemos nós escolhemos seguir a primeira janela criada pelo projeto durante a janela de assistente de projeto do aplicativo Qt classe base baseada em janelas, drop-down menu com três opções, a saber: QMainWindow, QDialog, QWidgetcomo mostrado abaixo:

4.1 Classe Básica de Janela

  • Existem 3 classes de janela comumente usadas
    • Ao criar uma janela Qt, você precisa fazer sua própria classe de janela herdar uma das três classes de janela acima
  • QWidget
    • A classe base de todas as classes de janela
    • Os controles no Qt (botões, caixas de entrada, botões de opção ...) também pertencem às janelas, e suas classes básicas sãoQWidget
    • Pode ser incorporado em outras janelas: sem borda
    • Pode ser exibido separadamente sem embutido: janela independente, com borda
  • QDialog
    • Classe de diálogo, os capítulos seguintes apresentarão esta janela em detalhes
    • Não pode ser incorporado em outras janelas
  • QMainWindow
    • Existem barra de ferramentas, barra de status, barra de menu, os capítulos seguintes irão apresentar esta janela em detalhes
    • Não pode ser incorporado em outras janelas

4.2 Vitrine

  • Janela embutida

    • Anexado a uma grande janela, como parte da grande janela
    • A janela grande é a janela principal desta janela incorporada
    • 父窗口显示的时候, 内嵌的窗口也就被显示出来了
  • Não incorpore janelas

    • Este tipo de janela possui uma borda e uma barra de título

    • É necessário chamar a função para exibir

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

5. Sistema de coordenadas do Qt

5.1 A origem das coordenadas da janela

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

  • eixo x aumenta para a direita
  • eixo y aumenta para baixo

5.2 Coordenadas relativas da janela

  • Pode haver vários controles em uma determinada janela do Qt, e esses controles estão todos em uma relação aninhada

    • A janela A contém a janela B, a janela B contém a janela C
  • Cada janela tem uma origem de coordenada, no canto superior esquerdo

    • A posição da janela filho é determinada com base no sistema de coordenadas da janela pai, ou seja, sua posição é determinada pelo ponto de coordenada no canto superior esquerdo da janela pai
  • As coordenadas relativas usadas quando a janela é exibida no Qt, em relação à sua janela pai

  • Mova a janela-filho para uma determinada posição da janela-pai

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

6. Mecanismo de reciclagem de memória no Qt

Ao criar um objeto em Qt, um será fornecido Parent对象指针(você pode ver o construtor da classe). Vamos explicar o que o pai faz.

QObject é organizado na forma de uma árvore de objetos. 当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是 parent,也就是父对象指针. Isso é equivalente a fornecer um objeto pai ao criar um objeto QObject, e o objeto QObject que criamos será adicionado automaticamente à lista children () de seu objeto pai. Quando o objeto pai for destruído, todos os objetos nesta lista também serão destruídos. (Atenção, 这里的父对象并不是继承意义上的父类!)

QWidget é a classe pai de todos os componentes que podem ser exibidos na tela. QWidget herda de QObject, portanto, também herda esse relacionamento de árvore de objetos. Um filho se torna automaticamente um componente filho do componente pai. Portanto, ele será exibido no sistema de coordenadas do componente pai e recortado pelo limite do componente pai. Por exemplo, quando o usuário fecha uma caixa de diálogo, o aplicativo a exclui, então, esperamos que os botões, ícones, etc. pertencentes a esta caixa de diálogo sejam excluídos juntos. Esse é o caso, porque todos esses são subcomponentes da caixa de diálogo.

Qt introduz o conceito de árvore de objetos, que resolve o problema de memória até certo ponto.

  • Quando um objeto QObject é criado no heap, o Qt também cria uma árvore de objetos para ele. No entanto, a ordem dos objetos na árvore de objetos é indefinida. Isso significa que a ordem em que esses objetos são destruídos também é indefinida.

  • Quando qualquer objeto QObject na árvore de objetos é excluído, se o objeto tiver um pai, ele será excluído automaticamente da lista de filhos () do pai; se houver filhos, cada filho será excluído automaticamente. Qt garante que nenhum QObject será deletado duas vezes, o que é determinado pela ordem de destruição.

Em resumo, podemos tirar uma conclusão: Qt中有内存回收机制, 但是不是所有被new出的对象被自动回收, 满足条件才可以回收Se você deseja realizar a recuperação automática de memória no Qt, você precisa atender às seguintes duas condições:

  • O objeto criado deve ser uma subclasse da classe QObject (subclasses indiretas também são possíveis)

    • A classe QObject não tem classe-mãe. Uma grande parte das classes em Qt são derivadas dessa classe.

      • As classes de janela e controles que são freqüentemente usados ​​no Qt são subclasses diretas ou indiretas do QObject
      • Outras classes podem consultar a documentação de ajuda do Qt por si mesmas
  • Para o objeto de classe criado, você deve especificar quem é seu objeto pai. Em geral, existem duas formas de operação:

  // 方式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);

Acho que você gosta

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