2012-07-09 4 views
4
#include <QtGui/QApplication> 
#include <QtDeclarative> 
#include "qmlapplicationviewer.h" 

int main(int argc, char **argv) { 
    QApplication app(argc, argv); 
    QmlApplicationViewer viewer; 

    viewer.setMainQmlFile("app/native/assets/main.qml"); 
    viewer.showFullScreen(); 

    return app.exec(); 
} 

Mon C++ est un peu rouillé. Quelqu'un peut-il m'expliquer s'il vous plaît ce que "QApplication app (argc, argv)" essaie de faire?Qu'est-ce que "QApplication app (argc, argv)" essayant de faire?

Essaye-t-il de déclarer une fonction qui prend 2 arguments (argc et argv) et renvoie une variable de type QApplication?

Répondre

3

Voici une citation de Qt Docs:

La classe QApplication gère le flux de contrôle de l'application GUI et paramètres principaux.

QApplication contient la boucle d'événement principal, où tous les événements du système de fenêtres et d'autres sources sont traités et distribués. Il gère également l'initialisation de l'application, la finalisation, et fournit la gestion de session. De plus, QApplication prend en charge la plupart des paramètres à l'échelle du système et à l'échelle de l'application.

Pour toute application graphique utilisant Qt, il existe précisément un objet QApplication , peu importe si l'application possède 0, 1, 2 ou plusieurs fenêtres à un moment donné. Pour les applications Qt non-GUI, utilisez plutôt QCoreApplication , car elle ne dépend pas de la bibliothèque QtGui.

L'objet QApplication est accessible via la fonction instance() qui renvoie un pointeur équivalent au pointeur qApp global.

Ainsi, la ligne

QApplication app(argc, argv);

crée une instance de la classe QApplication.

10

La ligne

QApplication app(argc, argv); 

crée une nouvelle instance de type QApplication et appelle le constructeur de cette classe. Dans votre exemple, la variable app stocke maintenant cette instance. Il est un peu (sémantiquement) un raccourci de ceci:

QApplication app = QApplication(argc, argv); 
+1

pourquoi cette déclaration ne nécessite pas le mot-clé "nouvelle" QApplication app = new QApplication (argc, argv); – DScript

+1

@DScript: avec 'new' vous alloueriez dynamiquement un objet sur le tas. Quand vous utilisez 'new' vous obtiendrez un pointeur à la place. Donc, vous devez faire ceci: 'QApplication * app = new QApplication (argc, argv);' – Constantinius

1

app() n'est pas une fonction, il est un appel constructeur.

Si vous venez de C# ou Java ou quelque chose, imaginez comme

QApplication app = new QApplication(argc, argv); 

Juste que l'application serait un pointeur de cette façon, alors qu'il est en fait l'objet lui-même si elle est créée comme dans votre exemple.

En bref, Qt a besoin d'un exemple QApplication pour exécuter signaux si & emplacements sont traités (si vous les utilisez) et des événements comme la peinture, etc sont traités

2

QApplication est une classe Qt qui contient la boucle d'événement principal.

Lorsque vous écrivez QApplication app(argc, argv); vous créez un objet app de cette classe, en appelant son constructeur avec argc et argv

Lorsque int main(int argc, char **argv) est appelé lors de l'exécution du programme, int argc est intialized pour contenir le nombre d'arguments passés en cours d'exécution du programme. char **argv contient un tableau d'arguments transmis au programme lors de son exécution. Char * argv [0] contiendra (pointera vers) le nom du programme, tandis que les éléments suivants pointeront vers les autres arguments passés. Argc et argv sont à leur tour passés au constructeur de QApplication, de sorte que l'on peut passer des arguments spécifiques à Qt lors de l'exécution de votre programme.

Pour un exemple de ces arguments essayer d'exécuter ./yourProgramName --help dans une fenêtre de terminal

Questions connexes