Tutoriel QT-1.1 Introduction à Qt

1. Présentation de Qt

1.1 Caractéristiques de Qt

  • Est un framework de développement d'applications C ++ multiplateforme
    • Il a les excellentes caractéristiques de court, plat et rapide: moins d'investissement, cycle court, effet rapide, rendement élevé
    • Prend en charge presque toutes les plates-formes, peut être utilisé pour le développement de programmes de bureau et le développement intégré
    • Possède son propre mécanisme de gestion des événements
  • Qt est une extension du C ++ standard, et la syntaxe de C ++ est prise en charge dans Qt
    • Un bon mécanisme d'encapsulation fait de Qt un très haut degré de modularité, une bonne réutilisabilité et un démarrage rapide.
    • Qt fournit un type sûr appelé signaux / slots pour remplacer le rappel, ce qui facilite grandement la collaboration entre divers composants.
  • Il est largement utilisé pour développer des programmes GUI et peut également être utilisé pour développer des programmes non-GUI.
  • graphical user interface
  • API riche
    • Qt comprend plus de 250 classes C ++
    • Peut gérer les expressions régulières.
  • Prise en charge du rendu graphique 2D / 3D, prise en charge d'OpenGL
  • Qt fournit des documents officiels très détaillés au programmeur
  • Prise en charge de XML, Json
  • Le bas du framework est modulaire, les utilisateurs peuvent choisir le module correspondant à utiliser en fonction de leurs besoins

1.2 Modules dans Qt

Un grand nombre de classes de la bibliothèque de classes Qt sont divisées en différents modules en fonction de leurs fonctions. Ces modules sont subdivisés dans les catégories suivantes:

  • Qt Essentials: Fournit les fonctions de base de Qt sur toutes les plates-formes.
  • Add-Ons Qt: Un module qui implémente certaines fonctions spécifiques et apporte une valeur ajoutée.
  • Value-AddModules: modules ou outils publiés séparément qui apportent une valeur supplémentaire.
  • Modules d'aperçu de la technologie: certains modules qui sont en phase de développement mais peuvent être utilisés comme aperçus de la technologie.
  • Outils Qt (Outils Qt): Quelques outils pour aider au développement d'applications.

Vous pouvez consulter les informations de tous ces modules sur le site officiel de Qt ou sur la page "Tous les modules" du document d'aide. Ce qui suit est la description officielle des modules de base de Qt. Si vous êtes intéressé par d'autres modules, vous pouvez le vérifier vous-même.

Module la description
Qt Core Le cœur de la bibliothèque Qt, tous les autres modules dépendent de ce module
Qt GUI Classes de base pour la conception d'interfaces GUI, y compris OpenGL
Multimédia Qt Fonctions audio, vidéo, caméra et diffusion
Widgets multimédias Qt Classes de composants d'interface qui implémentent des fonctions multimédias
Réseau Qt Des cours qui rendent la programmation réseau plus simple et plus légère
Qt QML Classes pour les langages QML et JavaScript
Qt rapide Cadre déclaratif pour la création d'applications dynamiques avec des interfaces utilisateur personnalisées
Contrôles rapides Qt Créer une interface utilisateur de style bureau, basée sur les contrôles d'interface utilisateur Qt Quick
Boîtes de dialogue rapides Qt Type de boîte de dialogue système utilisé pour Qt Quick
Dispositions rapides Qt Éléments de disposition pour les éléments d'interface Qt Quick 2
Qt SQL Classes qui utilisent SQL pour les opérations de base de données
Test Qt Classes pour les tests unitaires d'applications et de bibliothèques
Qt Widgets Classe de composant graphique C ++ pour la construction de l'interface graphique

Boîtier de 1,3 Qt

  • VirtualBox: Logiciel de machine virtuelle.
  • VLC多媒体播放器: Un petit et puissant lecteur multimédia open source.
  • YY语音: Aussi connu sous le nom de "YaiYai Voice", c'est un logiciel gratuit pour le chat vocal multi-personnes en ligne et la conférence vocale.
  • 咪咕音乐: Migu Music est un véritable lecteur de musique créé par China Mobile
  • WPS Office: Les logiciels bureautiques produits par Kingsoft ont une bonne compatibilité avec Microsoft Office et la version personnelle est gratuite.
  • Skype: Un logiciel de chat VOIP basé sur le P2P avec un grand nombre d'utilisateurs.

2. Installation

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


2.1 Étapes d'installation





Insérez la description de l'image ici

S'il s'agit de la version Qt5.13.2, l'interface est comme ça

  • MSVC2015 64 bits: kit de compilation 64 bits utilisé par Visual Studio 2015

  • MSVC2017 32 bits: kit de compilation 32 bits utilisé par Visual Studio 2017

  • MSVC2017 64 bits: kit de compilation 64 bits utilisé par Visual Studio 2017

  • MinGW7.3.0 32 bits: kit de compilation 32 bits utilisé par QtCreator

  • MinGW7.3.0 64 bits: kit de compilation 64 bits utilisé par QtCreator

  • UWP -> Universal Windows Platform: suite de compilateurs pour le développement d'applications de plate-forme Windows

    La plate-forme d'application Windows qui est commune dans Windows 10 Mobile/ Surface(Windows平板电脑)/ PC/ Xbox/ HoloLenssur d'autres plates-formes exécutées, l'application uwp exe est différente du PC traditionnel, s'applique également désormais uniquement au côté téléphone de l'application sont essentiellement différentes. Il n'est pas conçu pour un certain terminal, mais peut fonctionner sur tous les appareils Windows 10

  • Source: code source Qt, certains des pilotes nécessaires au fonctionnement des modules Qt ne fournissent pas de bibliothèques dynamiques prêtes à l'emploi et doivent être compilés par vous-même, il est recommandé d'installer

  • Graphiques Qt: Utilisé pour dessiner des graphiques correspondant à des données statistiques, telles que: graphique linéaire / graphique à courbes, etc.



Je choisis simplement d'installer MinGW7.3.0 32-bitet les Sourcedeux parties, lancez l'assistant d'installation, ce processus prend une longue attente


Insérez la description de l'image ici




2.2 Paramètres des variables d'environnement

  1. Recherchez l'icône Poste de travail (cet ordinateur) sur le bureau, cliquez avec le bouton droit de la souris et ouvrez la fenêtre des propriétés


  1. Sélectionnez "Paramètres système avancés" dans la fenêtre des propriétés

  1. Ouvrez la fenêtre des variables d'environnement

  1. Nouvelle variable d'environnement

  1. Ajoutez les répertoires pertinents de Qt aux variables d'environnement système

    • Description de la variable d'environnement:

      • Trouvez le répertoire d'installation de Qt: D:

      • Recherchez le répertoire bin de la bibliothèque Qt dans le répertoire d'installation: D:\Software\Qt5.13.2\5.13.2\mingw73_64\bin

      • Recherchez le répertoire bin de la suite compilée dans le répertoire d'installation: D:\Software\Qt5.13.2\Tools\mingw730_64\bin

2.3 QtCreator

  1. QtCreator est un IDE utilisé par défaut lors de l'écriture de programmes Qt. Il est également possible d'utiliser VS pour écrire des programmes Qt, donc je ne le présenterai pas ici.

  2. Le répertoire du projet créé avec QtCreator ne peut pas contenir de chinois

  3. QtCreator utilise le codage au format Utf8 pour coder les caractères du fichier par défaut

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

    • Afin de traiter les caractères chinois, les programmeurs ont conçu GB2312 pour le chinois simplifié et big5 pour le chinois traditionnel.

    • GB2312 prend en charge trop peu de caractères chinois. La spécification d'extension de caractères chinois GBK1.0 en 1995 prend en charge plus de caractères chinois.

    • En 2000, GB18030 a remplacé GBK1.0 et est devenu la norme nationale officielle.

    • Unicode est également une méthode de codage de caractères, mais il est conçu par une organisation internationale et peut accueillir des schémas de codage pour toutes les langues du monde

      • utf8
      • utf16
    • vs Ecrire l'encodage local par défaut utilisé par les programmes Qt -> gbk

    • Modifier le codage de QtCreator

  • Introduction à l'interface principale de QtCreator

    • Kit de compilation par défaut

      MinGW -> Minimalist GNU for Windows

      • MinGW fournit un environnement de développement de programme basé sur GCC simple et pratique sous Windows. MinGW a rassemblé une série de fichiers d'en-tête et de fichiers de bibliothèque gratuits utilisés par Windows;
      • Il intègre les ensembles d'outils GNU (http://www.gnu.org/), en particulier les outils de développement de programmes GNU, tels que gcc classique, g ++, make, etc.
      • MinGW est un logiciel gratuit entièrement gratuit. Il simule l'environnement de développement de GCC sous Linux sur la plate-forme Windows et fournit un bon support de base pour le développement multiplateforme de C ++. Il est fourni aux programmeurs travaillant sous Windows pour se familiariser avec l'organisation d'ingénierie C ++ sous Linux.

3. Créez le premier projet Qt

3.1 Créer un projet


  • Le nom du projet peut être spécifié par vous-même en fonction des besoins
  • 在指定项目的存储路径的时候, 路径中不能包含中文, 不能包含中文, 不能包含中文


  • Le kit de compilation est utilisé pour compiler les fichiers du projet. Si plusieurs kits de compilation sont installés, sélectionnez-en un ici

3.2 Projet 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 Autres documents

  • 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 classe window dans Qt

Dans l'avant - dernière étape , nous faisons nous choisissons de suivre la première fenêtre créée par le projet au cours de la classe de base fenêtre de l' assistant de projet à base de fenêtre de l' application Qt, menu déroulant avec trois options, à savoir: QMainWindow, QDialog, QWidgetcomme indiqué ci - dessous:

4.1 Classe de fenêtre de base

  • Il existe 3 classes de fenêtres couramment utilisées
    • Lors de la création d'une fenêtre Qt, vous devez faire en sorte que votre propre classe de fenêtre hérite de l'une des trois classes de fenêtre ci-dessus
  • QWidget
    • La classe de base de toutes les classes de fenêtre
    • Les contrôles dans Qt (boutons, zones de saisie, boutons radio ...) appartiennent également à des fenêtres, et leurs classes de base sontQWidget
    • Peut être intégré dans d'autres fenêtres: pas de bordure
    • Peut être affiché séparément sans intégré: fenêtre indépendante, avec bordure
  • QDialog
    • Classe de dialogue, les chapitres suivants présenteront cette fenêtre en détail
    • Ne peut pas être intégré dans d'autres fenêtres
  • QMainWindow
    • Il y a une barre d'outils, une barre d'état, une barre de menu, les chapitres suivants présenteront cette fenêtre en détail
    • Ne peut pas être intégré dans d'autres fenêtres

4.2 Affichage de la fenêtre

  • Fenêtre en ligne

    • Attaché à une grande fenêtre, dans le cadre de la grande fenêtre
    • La grande fenêtre est la fenêtre parente de cette fenêtre intégrée
    • 父窗口显示的时候, 内嵌的窗口也就被显示出来了
  • Ne pas intégrer de fenêtres

    • Ce type de fenêtre a une bordure et une barre de titre

    • Besoin d'appeler la fonction pour afficher

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

5. Système de coordonnées de Qt

5.1 L'origine des coordonnées de la fenêtre

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

  • l'axe des x augmente vers la droite
  • l'axe y augmente vers le bas

5.2 Coordonnées relatives de la fenêtre

  • Il peut y avoir plusieurs contrôles dans une certaine fenêtre de Qt, et ces contrôles sont tous dans une relation imbriquée

    • La fenêtre A contient la fenêtre B, la fenêtre B contient la fenêtre C
  • Chaque fenêtre a une origine de coordonnées, dans le coin supérieur gauche

    • La position de la fenêtre enfant est déterminée en fonction du système de coordonnées de la fenêtre parente, c'est-à-dire que sa position est déterminée par le point de coordonnées dans le coin supérieur gauche de la fenêtre parente
  • Les coordonnées relatives utilisées lorsque la fenêtre est affichée dans Qt, par rapport à sa fenêtre parente

  • Déplacer la fenêtre enfant vers une certaine position de la fenêtre parent

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

6. Mécanisme de recyclage de la mémoire dans Qt

Lors de la création d'un objet dans Qt, un sera fourni Parent对象指针(vous pouvez voir le constructeur de la classe) Expliquons ce que fait le parent.

QObject est organisé sous la forme d'une arborescence d'objets. 当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是 parent,也就是父对象指针. Cela équivaut à fournir un objet parent lors de la création d'un objet QObject, et l'objet QObject que nous avons créé sera automatiquement ajouté à la liste children () de son objet parent. Lorsque l'objet parent est détruit, tous les objets de cette liste seront également détruits. (Attention, 这里的父对象并不是继承意义上的父类!)

QWidget est la classe parente de tous les composants qui peuvent être affichés à l'écran. QWidget hérite de QObject, il hérite donc également de cette relation d'arborescence d'objets. Un enfant devient automatiquement un composant enfant du composant parent. Par conséquent, il sera affiché dans le système de coordonnées du composant parent et découpé par la limite du composant parent. Par exemple, lorsque l'utilisateur ferme une boîte de dialogue, l'application la supprime. Ensuite, nous espérons que les boutons, icônes, etc. appartenant à cette boîte de dialogue seront supprimés ensemble. C'est le cas, car ce sont tous des sous-composants de la boîte de dialogue.

Qt introduit le concept d'arborescence d'objets, qui résout dans une certaine mesure le problème de la mémoire.

  • Lorsqu'un objet QObject est créé sur le tas, Qt créera également une arborescence d'objets pour celui-ci. Cependant, l'ordre des objets dans l'arborescence d'objets n'est pas défini. Cela signifie que l'ordre dans lequel ces objets sont détruits est également indéfini.

  • Lorsqu'un objet QObject dans l'arborescence d'objets est supprimé, si l'objet a un parent, il est automatiquement supprimé de la liste children () du parent; s'il y a des enfants, chaque enfant est automatiquement supprimé. Qt garantit qu'aucun QObject ne sera supprimé deux fois, ce qui est déterminé par l'ordre de destruction.

En résumé, nous pouvons tirer une conclusion: Qt中有内存回收机制, 但是不是所有被new出的对象被自动回收, 满足条件才可以回收si vous souhaitez réaliser une récupération automatique de la mémoire dans Qt, vous devez remplir les deux conditions suivantes:

  • L'objet créé doit être une sous-classe de la classe QObject (des sous-classes indirectes sont également possibles)

    • La classe QObject n'a pas de classe parente. Une grande partie des classes de Qt sont dérivées de cette classe.

      • Les classes et contrôles de fenêtre fréquemment utilisés dans Qt sont des sous-classes directes ou indirectes de QObject
      • Les autres classes peuvent consulter la documentation d'aide Qt par elles-mêmes
  • Pour l'objet de classe créé, vous devez spécifier qui est son objet parent. En général, il existe deux méthodes de fonctionnement:

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_39400113/article/details/113253752
conseillé
Classement