lundi 22 juin 2015

Qt - Using Style Sheet

Voici le code Qt/C++ minimum pour bien commencer avec les "style sheet" de Qt. La documentation de Qt est très jolie mais pas très pratique au sens utilisable du terme, il y a très peu de petits exemples concrets.

Ce que je souhaite faire :
  • créer ma feuille de style 
  • l'appliquer à mon projet
Je prends une feuille de style toute faite, je pourrais la particulariser à loisir par la suite. J'ai trouvé "coffee.qss" dans l'exemple "stylesheet".

Références

Sur le site Developpez.com, niveau avancé, pour tout savoir sur les styles Qt.

Ajoutez la feuille de styles dans les ressources .qrc

Il faut vous arranger pour obtenir l'arborescence suivante dans votre projet :

Qt - Feuilles de style
Ajouter un fichier de ressource, créez le répertoire qss, y insérer la feuille de style "coffee.qss" puis faire boutons droit sur "mysstylesheet.qrc" et enfin : Ajouter fichier existant.

Appliquer "coffee.qss" dans votre projet

Il faut écrire un peu de code C++ pour appliquer cette feuille de style. Dans le projet exemple "stylesheet" il y a un sélecteur de css avec une dropbox et tout un bordel que l'on ne souhaite pas. 

Dans mainwindow.cpp on va ajouter le loader de style sheet :

void MainWindow::loadStyleSheet()
{
    QFile file(":/qss/coffee.qss");
    file.open(QFile::ReadOnly);
    QString styleSheet = QString::fromLatin1(file.readAll());

    qApp->setStyleSheet(styleSheet);
}

Il suffit maintenant d'appeler cette fonction dans la construction de l'UI :

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //
    // Load the style sheet called "coffe.qss"
    // in "qss" directory
    //
    loadStyleSheet();
}

Le tour est joué.

Lancer l'exécution du projet QtStyleSheet

A l'exécution du projet, la feuille de style est appliquée :

Qt StyleSheet Projet
Voici le code à télécharger : Download

Et si vous cherchez des stylesheet gratuites suivez le lien : Ici
N'hésitez pas à cliquer, partager, c'est fun !

mercredi 4 mars 2015

Qt - Sample Application with Visual Studio Add-In for Qt 5

Vous pouvez télécharger l'Add-In de Visual Studio pour Qt 5 à la page suivante : Qt io download en prenant soin de cliquer sur le bouton "View All download" ;). Vous l'avez installé bien sûr et vous allez donc pouvoir créer votre premier projet Qt avec Visual Studio, si si c'est possible.

Je souhaite donc créer un premier projet avec l'Add-In VS pour Qt5 :

Création d'un projet Visual Studio avec l'Add-in Qt 5
On vérifie ainsi que l'add-in est bien installé car on voit l'image du template pour Qt Application. On clique sur Ok. On entre dans le wizard de création du projet :

Wizard de création d'un projet Qt5 avec Visual Studio
Je clique sur Project Settings, et BOUM !!!

Qt5 - Project Settings - Erreur dans le script de la page
J'ai les trois cases cochées : Core, GUI, Widgets, je pense que c'est le projet le plus simple, le meilleur pour tenter de commencer.

Je regarde l'onglet "Generated Class" :

Add-In Qt5 pour Visual Studio - Onglet Generated Class
Je clique sur finish pour créer mon template d'application, et BOUM !!! :

Add-in Qt5 pour Visual Studio - Unable to find Qt Build!
Boum, boum, et boum avec Qt c'est toujours BOUM !

Solution - Unable to find a Qt Build !

Il faut builder Qt, rien de moins ... <:(  x( Grrrrr. Non ce n'est plus vrai aujourd'hui. Nous ne sommes n'est plus obligé de compilé les sources de Qt car il est livré avec une build pour chaque plateforme.

OUF !

Unable to find a Qt build ! To solve this problem specify a Qt Build!

http://qt-project.org/forums/viewthread/24681
Un menu "Qt" est apparu dans Visual Studio. Allons trouver le path de notre version :

Add-in Visual Studio - Add Qt Version
On clique sur Ok :

Add-in Visual Studio - Add Qt Version - 2
Have Fun !

lundi 2 mars 2015

Qt - Deployer une application - Suite (2)

Vous avez des difficultés à déployer vos applications Qt, c'est normal. Déployer une application Qt est un processus qui demande une connaissance et une complète maîtrise de toute la chaîne de développement. Chaque partie constituante du logiciel doit être compilée et linkée avec les bons éléments correspondants à la plateforme de développement.

Erreurs et Problèmes rencontrés avec MSVC

VCINSTALLDIR is not set

Message :
Warning: Connot find Visual Studio installation directory, VCINSTALLDIR is not set.
Solution :
Aller dans Qt Creator regarder comment la variable d'environnement est configurée.

Déploiement sur Windows 7 (64 bits) - Il manque MSVCR120.dll

Si vous essayez d'exécuter votre .exe sur une plateforme sans Qt et sans environnement de compilation, vous obtenez le messsage suivant : Il manque MSVCR120 sur votre ordinateur :

Qt - Impossible de démarrer le programme
Observez alors le répertoire déploiement de l'application, il y a un petit exécutable en forme d'install : "vcredist_64x.exe". Essayez une installation sur votre plateforme ...

MS Visual C++ 2013 Redistribualble (x64)

Qt Quick - Demos Clock running on deployement plateforme MSVC2013
J'ai également déployé clocks avec MinGW, vous pouvez télécharger l'exe et son environnement d'exécution afin de vérifier si cela fonctionne sur votre plateforme :

clocks-deployed-MinGW.zip

And Have Great Fun !

lundi 16 février 2015

Qt- Déployer une application - Suite (1)

Nous avons vu lors du post précédent, comment tenter de déployer une application rapidement. Mais cela ne fonctionne pas très bien. Nous allons tenter d'aller plus loin. En effet le message suivant :

This application failed to start because it could not load the Qt platform plugin "windows"
n'est pas si facile à corriger. J'ai pensé qu'il s'agissait de copier la dll qwindows.dll dans un répertoire nommé "platforms" mais lorsque je double clique sur mon exécutable ainsi déployé, j'obtiens le résultat d'exécution suivant :

Qt - Déploiement rapide - Résultat d'exécution vide !
ce n'est pas fameux, fameux. L'application est vide ! Rien ne s'affiche.

D'après les explication sur le site Stack Overflow : Application Failed to Start
Il s'agirait de copier le répertoire entier du plugin "plateform" du Kit concerné ...

C'est à dire que, pour une application générée avec le kit MinGW v4.9.1 et déployée, il faudrait copier le répertoire complet :

C:\Qt\5.4\mingw491_32\plugins\platforms
dans le répertoire de déploiement de l'application. Le problème est que cette dll qwindows, se trouve un peu partout, pour chaque Kit de développement mais également dans :

C:\Qt\Tools\QtCreator\bin\plugins\platforms

un vrai bordel ! Je dois y aller ... désolé de vous laisser ainsi mais je reviendrai bientôt torde le cou de ce problème crucial.

En attendant, Have Fun !

Solution dans le Qt Assistant

Je pense qu'il faut poursuivre en lisant la page suivante :

 http://qt.developpez.com/doc/4.7/deployment/

On peut installer et déployer les DLL grâce à l'outil :

http://www.dependencywalker.com/

Et pour terminer, tout se trouve dans le Qt Assistant :

L'aide de Qt le Qt Assistant
Il faut taper "deploy" dans la barre de recherche :

Déployer une Application Qt
Même l'outil Dependency Walker y est référencé ... c'est pour dire ;)

Autre outil : Windows Deployement Tool qui se trouve dans le répertoire de chacun des Kits.
windeployqt [options] [files] ... je vous laisse découvrir.

Déployer une application avec Qt (Suite 2)



Qt- Déployer une application - Introduction

Mon conseil pour déployer une application Qt. C'est tout simple : vous créez un répertoire "Deployed" vous y mettez l'exécutable que vous souhaitez déployer puis vous double-cliquez dessus :

Qt - Déployer une application
Il vous suffit ensuite d'aller chercher les DLLs manquantes correspondantes, pour les copier dans le répertoire "Deployed".

Pour l'exemple clocks.exe on aura copié les DLL :
Qt5Quick.dll
Qt5Qml.dll
Qt5Network.dll
Qt5Gui.dll
Qt5Core.dll
icuin53.dll
icudt53.dll
icuuc53.dll
et bien sûr clocks.exe

D'aucuns diront que ce n'est pas très propre ... et alors ? Ça fonctionne.

Vous aurez certainement d'autres DLLs à copier suivant la plateforme où vous souhaiterez faire fonctionner votre application.

Des DLLs sont également dans :
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist
Visual Studio Express 2013
msvcr120.dll
msvcp120.dll

Et encore un truc du type truc et astuce, un peu de magie :

Qt\Qt5.1.1\5.1.1\msvc2012\plugins\platforms

Créer un répertoire "platforms" pour y mettre la qwindowsdll

samedi 14 février 2015

Déplacer un projet Qt dans le répertoire de développement

Vous souhaitez conserver les exemples tels quels et commencer à travailler dans le répertoire de de votre choix.

Donc, je prends le projet Clock au fin fond de l'arborescence C:\Qt\Examples\Qt-5.4\quick\demos\clocks et je le déplace dans mon répertoire de travail. Que va t-il se passer ?

Premier problème : une erreur d'un autre monde dans le répertoire de build :
Une version incompatible existe déjà ...

Vous venez de déplacer le projet et pourtant la compilation s'effectue toujours au même endroit dans : C:\Qt\Examples\Qt-5.4\quick\demos\build-clocks-Desktop_Qt_5_4_0_MSVC2013_OpenGL_64bit-Debug

Oui j'utilise : Qt 5.4 et Visual Studio 2013 ;)

Créer un répertoire de build

Créer un répertoire où vous souhaitez voir le résultat de compilation édition des liens s'enregistrer. Pour ce faire, allez dans "Projets"->Shadow Build :

Créer un répertoire de shadow build
Et pointez vers le répertoire que vous venez de créer.
Cela ne suffit pas ! Il vous faudra :

Placez le fichier shared.h au bon endroit

L'erreur est maintenant : dans le fichier main.cpp avec la directive include :
#include "../../shared/shared.h"
qui fait référence au fichier qui se trouve dans :
C:\Qt\Examples\Qt-5.4\quick\shared\shared.h

Vous pouvez placer une copie de ce fichier au bon endroit et tout fonctionne à nouveau.

vendredi 13 février 2015

Qt - Maintenance tool - Maintenir Qt

La maintenance de Qt s'effectue grâce à l'outil "Qt Maintenance Tool". Cet outil permet énormément de choses. En particulier la gestion des paquets, c'est à dire des différents éléments de Qt que vous avez installés sur votre disque dur, votre plateforme de développement.

Qt Maintenance Tool - Fenêtre principale
Cet outil permet la gestion des versions, des kits de compilation ...

Depuis que j'ai modifier les effet graphiques de ma plateforme de développement, c'est moins beau mais cela va beaucoup plus vite :

Qt Maintenance Tool - Les différents packages
Gros problème de maintenance, le processus se bloque.

J'arrête de jouer avec avec les downloader online :
qt-opensource-windows-x86-1.6.0-7-online.exe et autre
qt-opensource-windows-x86-1.6.0-8-online.exe
d'ailleurs y a combien de versions de ce truc ?!

et je télécharge la version complète pour voir ...



jeudi 12 février 2015

Qt - Erreur et problèmes rencontrés - Solutions

Je n'ai pas encore assez d'expérience pour me permettre de déclarer que la Plateforme Qt est stable ou instable. Pour moi, ce n'est vraiment pas très stable. On ajoute ou on retire un Kit de développement, on déplace un projet et tout est cassé ! Alors pour mieux maîtriser le développement Qt et retomber sur ses pattes, voici quelques conseils, astuces et problèmes résolus.

Error CL.exe n'est pas reconnu comme commande interne

J'imagine que c'est le compilateur/linker et bien voici qu'il a été lancé deux fois et l'erreur est :

xx:xx:xx: Débute : "C:\Qt\Tools\QtCreator\bin\jom.exe"
C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
cl -c -nologo -Zm200 -Zc:wchar_t -FS -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\application.pdb -DUNICODE -DWIN32 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"C:\Qt\5.4\msvc2013_64_opengl\include" -I"C:\Qt\5.4\msvc2013_64_opengl\include\QtWidgets" -I"C:\Qt\5.4\msvc2013_64_opengl\include\QtGui" -I"C:\Qt\5.4\msvc2013_64_opengl\include\QtCore" -I"debug" -I"." -I"C:\Qt\5.4\msvc2013_64_opengl\mkspecs\win32-msvc2013" -Fodebug\ @C:\Users\Mabyre\AppData\Local\Temp\main.obj.328.31.jom
'cl' n'est pas reconnu en tant que commande interne
ou externe, un programme ex‚cutable ou un fichier de commandes.

On dirait que CL.exe n'est pas reconnu comme commande interne !? Bien sûr c'est faux !

Solution à l'erreur : "cl n'est pas reconnu"

 J'ai supprimé tous les fichiers dans le répertoire de compilation :
debug
release
Makefile
Makefile.Debug
Makefile.Release

Et tout est rentré dans l'ordre :

Qt - Exécution du fameux exemple - Clock
Le Répertoire de compilation se trouve ici :
C:\Qt\Examples\Qt-5.4\quick\demos\build-clocks-Desktop_Qt_5_4_0_MSVC2013_64bit-Debug

Qt Maintenance tool (Maintenir Qt) se bloque à 99%

Stable ou instable ? Oups, oups, oups, je lance l'outil ... il reste bloqué à 99 % pendant plusieurs minutes :

Qt Maintenance Tool bloqué à 99%
C'est sans doute le processus MaintenanceTool.exe *32 qui est bloqué, je le supprime, le relance, rien n'à faire, je redémarre ma machine et puis ça repart.

OUF ! pour cette fois ...

Seulement voilà, quelques jours après, je souhaite ajouter un "paquet" et boum bloqué, à nouveau !
Je m'aperçois que chaque fois que l'on quitte l'application d'installation des paquets, le processus MaintenanceTool.exe n'est pas arrêté :

Installation Qt - Bloquée à 99% !?
Qu'est ce qui empêche Qt de se mettre à jour ?

Qt Maintenance Tool se bloque - Solution

Pour répondre à la question : qu'est ce qui empêche Qt de se mettre à jour ? Je suis allé voir le fichier : C:\Qt\InstallationLog.txt et j'ai pu lire une ligne :

Warning: Could not delete file C:/Users/UserName/AppData/Local/Temp/qt_temp.ER2640: Le processus ne peut pas acc?der au fichier car ce fichier est utilis? par un autre processus.

Bref,  j'ai supprimé tous ces fichiers temporaires ....

Il peut y avoir le fichier MaintenanceTool.dat corrupted ... en le renommant, et en exécutant MaintenanceTool.exe celui-ci indique une installation corrupted à réinstaller from scratch. Ce n'est pas ce que je souhaite faire ...

Encore que tout ce temps perdu ... j'aurais peu être mieux fait de réinstaller from scratch ... Qt m'inquiète un peu pour lancer un développement professionnel. Comment être sûr qu'il ne va pas planter à chaque instant. C'est vraiment flippant !

Remarque : Lorsque l'on renomme le fichier .dat MaintenanceTool indique une install corrompue mais il arrive à s'arrêter tandis que quand il est bloqué, il faut aller supprimer le processus "à la mano" ...

Finalement je supprime tout et je recommence, merci Qt.

Qt Tutoriel & Notes rapides

Partir à la découverte de Qt 5.4.0 et créer le plus rapidement possible une application exploitable avec les outils de Qt : Qt Creator.

Application Qt Quick

Qt propose un grand nombre d'applications... widgets, console ui. Pourquoi pas une Qt Quick ? Feu :

Menu Fichier->Nouveau fichier ou projet...

Qt 5.4.0 - Création d'une application Qt Quick
Une fois l'application Qt Quick crée avec le nom "MyApplicationQtQuick", voici ce que j'ai dans mon répertoire :

Fichiers de l'application Qt Quick
Le fichier .pro c'est le projet, c'est le fichier que l'on ouvre avec Qt Creator qui me présente l'arborexcence sous la forme :

Application Qt Quick dans Qt Creator
Menu Compiler->Exécuter, j'obtiens le résultat d'exécution suivant :

Exécution de l'application Qt Quick
J'imagine qu'à la compilation pour l'exécution, Qt Creator a créé un tas de choses sur mon disque dur :

Qt Creator a généré un exécutable
Je double clique sur l'exécutable : MyApplicationQtQuick.exe, j'obtiens le résultat suivant :

Erreur à l'exécution de mon .exe
Mon exécutable ne trouve pas la DLL Qt5Widgets.dll et c'est normal, il va me falloir faire deux ou trois petites choses afin de déployer ma nouvelle application QtQuick.

Qt Quick vs Qt C++

Par rapport à Qt C++ il y a de nombreuses différences.
Qt Quick utilise le "QML" c'est à dire le langage déclaratif d'interface utilisateur.

Le fichier main.cpp se résume alors à  :

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

Lancer le moteur d'application avec comme argument le fichier main.qml en langage déclaratif d'interface utilisateur.








vendredi 6 février 2015

Qt Installation (Suite 2)

Vous souhaitez installer Qt ? Voici quelles sont les précautions à prendre, où et quoi installer. Ça parait simple mais pourtant, vous vous faites rapidement piéger par le site :
http://www.qt.io/download-open-source/

J'ai cliqué sur le premier bouton "Dowload now" et j'ai commencé à jouer avec le "downloader online" :
qt-opensource-windows-x86-1.6.0-7-online.exe puis la version suivante
qt-opensource-windows-x86-1.6.0-8-online.exe

J'ai utilisé le tool Qt Maintenance et là, je suis entré dans processus instable, j'ai essayé de mettre à jour les "paquets", c'était impossible, le processus se bloquait ... infernal ! Suppression des fichiers temporaires, termination du processus redémarrage, ça à fonctionné une fois puis plus rien ! Désinstallation complète, et tentative de réinstallation ... BLOCAGE TOTAL.

Et enfin, j'ai découvert le bouton "View All Downloads" que je vous présente, voici :

Installer la bonne version de Qt
Là, j'ai pu alors installer uniquement ce que vous voulez, comme par exemple :

qt-opensource-windows-x86-msvc2013_64-5.4.1.exe

J'ai même retrouvé l'Add-in pour Visual Studio que je croyais avoir définitivement perdu !

Visual Studio Add-in 1.2.4 for Qt5

Voici donc ce que j'ai installé :


Qt 5.4.1 Installateur - MSVC2013

C'est beaucoup moins complet que l'installateur online !?



Du coup la question qui se pose, c'est comment sont gérés les différents Kits de compilation ? Car je vous rappelle que Qt doit permettre de développer des applications multiplateforme.

Bref, c'est pas gagné ! Qt c'est beau sur le papier mais en pratique c'est bourré de pièges.

Qt Installation - Encore un piège

J'ai noté quelque part que je trouvais curieux que Qt me demande de nommer le raccourci vers l'exécutable Qt Creator.exe. Je ne sais pas pourquoi mais j'ai l'intuition que c'est lié, il faut choisir soigneusement le nom du dossier d'installation de Qt.

Voici le piège :

En lançant l'installation depuis qt-online, Qt s'est installé dans :
C:\Qt\5.4 

Et en réinstallant depuis : qt-opensource-windows-x86-msvc2013_64-5.4.1.exe, qt s'est installé dans :
C:\Qt\Qt5.4.1\5.4

Alors devinez quoi ? Toutes les procédures de déploiement, tous les batchs que j'avais fait pour une installation précédente sont à refaire !

Qt Installation - Des pièges des pièges et encore des pièges

Cette fois, c'est l'outil Maintenir Qt qui n'est pas configuré. Comme j'ai téléchargé l'installe directement sans passer par le online on me punit, je dois configurer un dépôt valide !

Qt Maintenance Impossible !

Mise à jour le 10 Août 2015

Je tente de lancer "Qt Maintenance Tool", il tourne en boucle :

Qt Maintenance Tool - En boucle infinie !
Décidément l'installation de la bonne version de Qt sur la bonne plateforme ce n'est pas gagné !

Mise à jour Février 2017

Allez encore une petite pour la route, voici le "nouveau site web de Qt Open Source" :

Qt Open Source Download

Franchement ? Vous trouvez ça mieux que l'ancien ?
Je tente la mise à jour Qt pour Visual Studio 2013 ...


Qt 5.8.0 for Windows 64-bit VS 2013
Sur ma plateforme de développement, je vous tiens au courant...

On se tient au jus ;)

jeudi 5 février 2015

Qt Version 5.0 et Visual Studio

Du temps a passé, de l'eau a coulée sous les ponts, depuis mon dernier post sur ce blog. Je m'aperçois que j'ai travaillé sur Qt en 2012 avec Visual Studio 2010 et Qt v4.8.3. Il me semble que les problèmes que j'ai eu à l'époque étaient légitimes, je n'avais pas réussi à passer assez de temps pour faire fonctionner tout cela correctement.

L'idée est de vérifier si cela fonctionne mieux aujourd'hui, si c'est plus facile d'accès. On parle maintenant de Qt v5.0 et de l'Add-in Visual Studio pour Qt 5 en version 1.2.1.

Quelle version de Visual Studio pour Qt v5.0 ?

Cette fois, au lieu d'aller m'enregistrer sur le site commercial, si j'essayais la version Open source ...

Je télécharge :
qt-opensource-windows-x86-1.6.0-7-online.exe

J'installe Qt v5.4 sur ma machine Windows 7, je lance "Qt Creator" et BOUM !!! :

Qt Creator failed to create OpenGL context
Qt me demande d'installer un driver fournissant OpenGL 2.0 ou supérieur.
Ça commence bien, ce n'est pas gagné, l'install de Qt aurait pu me prévenir, l'application Qt Creator est complètement plantée c'et du plus mauvais effet.

Qt Creator failed to Create OpenGL context

Qt exécute OpenGL tandis que Windows c'est plutôt DirectX. Donc pour exécuter Qt Creator sur Windows, il vaut mieux regarder les caractéristiques et la puissance de la carte vidéo.

Comme, j'exécute Qt sur une machine virtualisée, il me faut regarder les caractéristiques de la carte vidéo virtualisée, de plus prêt :

Configuration de l'affichage de la machine virtualisée
Il me faut cocher : "Activer l'accélération 3D" et 2D sinon Qt Creator ne fonctionne pas. Le message d'erreur est mauvais car il aurait tendance à faire croire qu'il faut installer un Driver OpenGL.

Add-In VS pour Qt 5.0 - Qt est-ce vraiment de l'Open Source ?

Pendant ce temps, j'ai installé Visual Studio 2012 Express édition. Sur le site de développez.com, on me dit que je peux trouver "Visual Studio Add-In 1.2.0 pour Qt 5" seulement lorsque j'arrive sur le site de Qt déjà le site s'appelle "Qt Open Source & Commercial" bonjour le mélange des genres.

On peut y voir que la première version qui possède l'add-in pour Visual Studio est la version professionnelle à 174 $ / mois ! Au secours !

C'est un peu délirant.
Je vais partir à la recherche des sources.

Qt Visual Studio Add-In

Qt Documentation - C'est la stupéfaction

Je m'aperçois que tous les liens qui pointaient vers des pages de la documentation, sur des exemples particuliers, comme le lien suivant :


Maintenant tous ces liens pointent vers :


La documentation de Qt manque vraiment de suivi. C'est une catastrophe !

dimanche 1 février 2015

Qt - Visual Studio Add-In


Vous cherchez un Add-In pour Visual Studio, c'est à dire un template VS qui créé un projet pour Qt à l'aide de Visual Studio ... En 2012, je suis passé à côté de ce sujet, ayant installé la version commerciale de Qt l'add-in Visual Studio était compris. Qu'en est-il aujourd'hui ?

Visual Studio Add-In 1.2.0 for Qt 5 Released :
http://blog.qt.io/blog/2012/12/19/visual-studio-add-in-1-2-0-for-qt-5-released/

Lisez les commentaires en bas de page, on vous dit que votre plateforme Visual Studio 2010 sera définitivement déstabilisée .... Grrrrr !

Tout ceci n'est pas très sérieux, la page suivante :
http://www.qt.io/download/

Montre clairement qu'il faut payer !

http://openclassrooms.com/courses/utiliser-qt-avec-visual-studio-2010
On vous explique comment positionner les variables d'environnement pour recomiler Qt avec Visual Studio mais ne cherchez pas c'est obsolète le page qt.nokia a disparu !

L'Add-in de Visual Studio pour Qt est-il devenu un fantasme qui n'a pas été mis à jour ?

http://www.qt.io/download-open-source

En fait il faut absolument cliqué sur "View All Download" pour retrouver :

Visual Studio Add-in 1.2.4 for Qt5 (156 MB) (info)
Pendant que vous lisez ce post, 3 nouvelles versions de Qt viennent de sortir ... ;)



lundi 17 décembre 2012

Qt - Le coeur

Bon on a déjà vu que Qt est énorme, il prend en compte tous aspects d'un environnement de développement et d'exécution multiplaforme. Ainsi dans le coeur, on retrouve des problématiques d'allocation mémoire d’alignement de buffers et même de processeur avec la notion de little indian et le big indian.

On voit également que tous les codes sources sont là et c'est énorme :
Jetons un oeil dans : C:\Qt\4.8.3\src
Taille : 3,53 Go
Fichiers : 27 968

C:\Qt\4.8.3\src\corelib
Taille : 152 Mo
Fichiers : 1 111

Qt Corlib Gobal

C:\Qt\4.8.3\src\corelib\global
qmalloc.cpp : tient tient de l'allocation mémoire
   qMalloc
   qReallocAligned

qendian.h : little indian big indian problems
   qbswap

qnumeric.cpp
qnumeric.h
   qIsInf
   qIsNaN
   qIsFinite

Qt Corlib Kernel

C:\Qt\4.8.3\src\corelib\kernel
Fichiers : 93

qmath.h : librairie mathématique
fonctions inline : optimistation
inline int qCeil(qreal v)
inline int qFloor(qreal v)
inline qreal qFabs(qreal v)
inline qreal qSin(qreal v)
inline qreal qCos(qreal v)
inline qreal qTan(qreal v)
inline qreal qAcos(qreal v)
inline qreal qAsin(qreal v)
inline qreal qAtan(qreal v)
inline qreal qAtan2(qreal x, qreal y)
inline qreal qSqrt(qreal v)
inline qreal qLn(qreal v)
inline qreal qExp(qreal v)
inline qreal qPow(qreal x, qreal y)
inline qreal qFastSin(qreal x)
inline qreal qFastCos(qreal x)

qmath.cpp : sinus tabulé optimisation
qt_sine_table

Abstract Event Dispatcher

qabstracteventdispatcher.cpp
qabstracteventdispatcher.h
   QAbstractEventDispatcher
   registerTimer
   processEvents
   registerSocketNotifier
qabstracteventdispatcher_p.h

Core Application

qcoreapplication.cpp
qcore_mac.cpp

Qt - Installation (Suite)

Je vois bien que j'ai des problèmes avec l'installation de Qt sur ma machine. Par exemple le fait de ne pas pouvoir linker avec une simple DLL, c'est à dire un projet du template Add-In me pose question.

Ce que je vais faire lorsque la licence commerciale viendra à échéance, c'est réinstaller une machine, dans l'ordre :

Qt Open Source
Configure
Nmake
Add-In

Et on verra bien ce que cela donne ...

Conclusion

En fait pas du tout, il faut tout désinstaller et tout réinstaller, c'est une erreur de marketing de Qt qui met en avant sa version commerciale :
Qt Download Open Source
1 : Si vous cliquez sur le bouton Download Now vous téléchargez qt-unified-windows-x86-online.exe et c'est le bordel le plus absolu avec le mode "mise à jour remote" et quelque part vous achetez la version commerciale ...

2 : Tandis qu'il faut absolument cliquer sur "View All Downloads" pour accéder à la bonne version "Open source".

jeudi 13 décembre 2012

Qt avec Visual Studio c'est Fun - Grrrr

Pas de doute c'est fun !

Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QtLibrary2::~QtLibrary2(void)" (__imp_??1QtLibrary2@@QAE@XZ) referenced in function _main E:\Qt4 VisualStudio C++\QtApplicationUsingQtLib2\QtApplicationUsingQtLib2\main.obj QtApplicationUsingQtLib2


By default, VS compiles with "Treat wchar_t as Built-in Type" enabled (/Zc:wchar_t). Qt compiles with that option disabled (/Zc:wchar_t-). If you disable the "Treat wchar_t as Built-in Type" in VS (under Configuration Properties > C/C++ > Language), before building the static library, does that fix it?

Vous cherchez une solution ?
Je n'en ai pas, je tente toujours d'utiliser une pauvre DLL qu'elle soit dynamique ou static peut importe cela m'est égale mais cela semble impossible.

Visual Studio Static Library
Project -> (bouton droit) Properties -> Configuration Properties -> General -> (volet) Project Defaults -> Configuration Type : Static Library (.lib), Dynamic Library (.dll)

mercredi 5 décembre 2012

Qt Sample in Visual Studio

J'ai un exemple Qt : WorldTimeclockBuilder que je souhaite utiliser comme base de départ pour développer. Il me faut intégrer cet exemple dans un projet Visual Studio.

Cet exemple se trouve sur mon disque dur à l'emplacement suivant :

C:\Qt\4.8.3\examples\designer\worldtimeclockbuilder

Sur le réseau, je trouve de la documentation; ici :
http://doc.qt.digia.com/qt/designer-worldtimeclockbuilder.html

Comment intégrer cet exemple dans un projet Qt4 Visual Studio ? Voilà la question que je vais tenter d’élucider.

Observons le fichier UI : form.ui

C'est ce fichier qui va donner les informations permettant de créer un projet au plus prêt de ce dont on a besoin.
Avec Qt Designer on observe que form.ui est constitué de 3 objets principaux :
WorldTimeForm : la form principale de l'application est un QWidget
worldTimeClock : un customwidgets
timeEdit
spinBox

Le projet WorldTimeClock

Donc mon projet va s'appeler WorldTimeClock

File->New->Project
Qt project WorldTimeForm
Dans le wizard de création du projet je choisi de renommer le fichier .ui en form.ui et comme class de base une QWidget :
Qt project form.ui et QWidget
Je prends soin de choisir comme Base class une QWidget pour changer un peu ...

J'ai crée ainsi l’arborescence de projet suivante :

Arborescence du projet WorldTimeForm

What's the difference between QMainWindow and QWidget and QDialog?

QWidget is the base class for all drawable classes in Qt. Any QWidget-based class can be shown as a window by showing it when it has no parent.

QDialog is based on QWidget, but designed to be shown as a window. It will always appear in a window, and has functions to make it work well with common buttons on dialogs (accept, reject, etc.).

QMainWindow is designed around common needs for a main window to have. It has predefined places for a menu bar, a status bar, and other widgets. It does not have any built-in allowances for buttons like QDialog does.

En compilant je m'aperçois que form.ui attend un worldtimeclock.h

 <customwidgets>
  <customwidget>
   <class>WorldTimeClock</class>
   <extends></extends>
   <header>worldtimeclock.h</header>
   <container>0</container>
   <pixmap></pixmap>
  </customwidget>
 </customwidgets>

Ajout du Widget WorldTimeClock dans ma solution :
Customer Widget added to project

Wizard de création d'un Qt4 Designer plugin

Custom Widget

Et là c'est le drame !

Malgrés toutes mes tentatives pour configurer correctement les properties de mon projet les .h et les .lib impossible de Linker :

error LNK2019: unresolved external symbol "public: virtual __thiscall QtPluging::~QtPluging(void)" (??1QtPluging@@UAE@XZ) referenced in function _main E:\Qt4 VisualStudio C++\QtApplicationUsingPlugin\QtApplicationUsingPlugin\main.obj QtApplicationUsingPlugin

Remarques :
Un plugin n'est utilisable qu'en release ?! Ah bon mais alors comment fait-on pour le débugger ... En plus cela doit bien vouloir dire quelque part qu'il faut l'installer par exemple dans : C:\Qt\4.8.3\plugins pour l'utiliser. Bref galère en perspective.

Même avec une simple DLL

Bon je vais essayé déjà d'utiliser une simple DLL ...

Même en ne créant qu'un simple projet n'utilisant qu'une simple DLL :

#include "qtapplicationusingqtlib.h"
#include <QtGui/QApplication>

#include "qtlibrary.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtApplicationUsingQtLib w;

QtLibrary MyLib;

w.show();
return a.exec();
}

Projet Qt Application Using QtLib
Ayant bien pris soin de :

Linker properties

Impossible de linker le moindre projet modulaire

error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QtLibrary::~QtLibrary(void)" (__imp_??1QtLibrary@@QAE@XZ) referenced in function _main E:\Qt4 VisualStudio C++\QtApplicationUsingQtLib\QtApplicationUsingQtLib\main.obj QtApplicationUsingQtLib

Et sur Internet comment utilise t-on VS et Qt ?

Quand je lis ce que je lis sur Internet cela fait peur ... 
Pas si simple finalement d'utiliser Qt avec Visual Studio ...
Je vais certainement passer du temps à regarder ce que sont vraiment les fichiers .pro et .pri dont l'Add-In me permet de faire des imports et des exports.

Reprenons l'installe de Qt

Au hasard de mes recherches sur Internet je suis bien tombé sur :

http://portfolio.delinkx.com/files/Qt.pdf

et sur :

http://www.siteduzero.com/tutoriel-3-36553-utiliser-qt-avec-visual-studio-2010.html

mais franchement cela ne donne pas envie.

Ce que je ne comprends pas encore

C'est que le VS Add-In pour Qt semble avoir configuré un certain nombre de choses ... au niveau du template des projets créer, ils compilent se linkent et s'exécutent mais que cela ne fonctionne pas dans le cadre d'une DLL.

Par contre les variables d'environment :

QMAKESPEC=win32-msvc2010
QTDIR=C:\Qt\4.8.3

ne sont pas settées, le PATH non plus n'est pas setté !

Je suis le document suivant :

http://portfolio.delinkx.com/files/Qt.pdf

Je vais setter mes variables et tient je tombe sur le fichier :
C:\Qt\4.8.3\bin\qtvars.bat

Oups, je regarde la date de ce fichier, il a été généré et a une date ultérieure à mon installe de Qt ...
Aurait-il été créé par le configure que j'ai exécuté ? :

STEP 3: CONFIGURE QT FOR YOUR MACHINE
• Run the Visual Studio Command prompt. Start > Program Files > Visual Studio > Visual
Studio Tools > Visual Studio Command Prompt
• Go to the path of your installed Qt e.g. cd C:\Qt\2009.01\qt
• At the prompt type the command configure. E.g. C:\Qt\2009.01\qt> configure
• This will configure Qt for your machine. In case you have multiple compilers installed, and
want to build the Qt library using a specific compiler, you must specify a qmake
specification. This is done by pasing -platform <spec> to configure. E.g. configure -platform
win32-msvc

Je suis en train de me prendre les pieds dans le tapis :

STEP 2: SETTING ENVIRONMENT VARIABLES
• Add this 2 paths to the Environment Variables: “C:\Qt\2009.01\bin” and
“C:\Qt\2009.01\qt\bin”. Note: This path will depend where you install the Qt.
• To add to the path: Control Panel > System > Advanced > Environment Variables
• Select “PATH” under system variables. Click “EDIT” and Add this to the end of the line:
C:\Qt\2009.01\bin; C:\Qt\2009.01\qt\bin (Remember to separate two paths with a “;”)

Bref ! Je suis maintenant convaincu que l'Add-In ne fait pas tout et que j'ai bien fait de lancer la commande configure depuis : C:\Qt\4.8.3

Effectivement c'est énorme, je suppose que la commande C:\Qt\4.8.3\configure.exe utilise le fichier C:\Qt\4.8.3\configure

configure est un fichier de 328 Ko en texte, je regarde un peu dedans par curiosité ...

## This file is the build configuration utility of the Qt Toolkit.

Si je regarde la fin du fichier, je peux y puis lire :

MAKE=`basename "$MAKE"`
echo
echo Qt is now configured for building. Just run \'$MAKE\'.
if [ "$relpath" = "$QT_INSTALL_PREFIX" ]; then
    echo Once everything is built, Qt is installed.
    echo You should not run \'$MAKE install\'.
else
    echo Once everything is built, you must run \'$MAKE install\'.
    echo Qt will be installed into $QT_INSTALL_PREFIX
fi
echo
echo To reconfigure, run \'$MAKE confclean\' and \'configure\'.
echo

Si je comprends bien, on me demande de builder Qt avec >MAKE install et c'est cohérent avec le Step 4 de mon tuto, mais alors pourquoi j'ai pu lancer une application Qt avec VS en Debug, comme à la fin de l'installe, pourquoi cela a t-il fonctionné juste avec l'Add-In ...

Que fait la commande >configure ?

On peut s'y attendre c'est énorme mais entre autres choses utiles :

Création du fichier solution Visual Studio :
C:\Qt\4.8.3\projects.sln
Attention avant de l'ouvrir, il comporte 400 projets. Tous ces fichiers projets .vcxproj ont été créés par le configure.

C:\Qt\4.8.3\translations est touché ajout des répertoires :
C:\Qt\4.8.3\translations\debug
C:\Qt\4.8.3\translations\release
C:\Qt\4.8.3\translations\tmp

dans C:\Qt\4.8.3\bin sont créés :
qmake.exe
qtvars.bat

C:\Qt\4.8.3\mkspecs

C:\Qt\4.8.3\tools
C:\Qt\4.8.3\tools\activeqt\activeqt.sln
C:\Qt\4.8.3\tools\activeqt\Makefile

Ok je MAKE ou plutot nmake

Ok très bien j'ai compris, je suis maintenant convaincu, je vais lancer le make :

STEP 4: BUILDING QT FOR VISUAL STUDIO
• Run nmake at the command prompt
• This takes lots of time. Will build all the demos, examples and libraries.

Bref à vérifier mais je crois bien que le configure fait le make en version 4.8.3

Autre fichier intéressant pour débuter :

C:\Qt\4.8.3\changes-4.8.3

Quand on voit le boulot qui est fait c'est impressionnant !

mardi 4 décembre 2012

Qt Sample in Visual Studio - Add a Dialogbox on a PushButton

A l'aide de Qt Designer, j'ajoute un bouton "Ok" que je nomme okButton dans mon fichier myqt4application.ui

Une fois l'Add-In de Qt for Visual Studio installé c'est assez pratique, en double-cliquant sur le fichier .ui il s'ouvre dans Qt Designer. Je cherche à conserver qui ce a été créé par le Qt4 Template et conserver la même structure d'application.

Alors donc, que dois-je faire pour connecter un gestionnaire d’évènements à mon nouveau bouton ?

Après avoir bien lu la page suivante :
http://doc.qt.digia.com/qt/designer-using-a-ui-file.html

Je passe à l'action :

Dans mon application, j'ai repéré la ligne :
ui.setupUi(widget);

C'est la ligne :
ui.setupUi(this);
du fichier :
MyQt4Application\myqt4application.cpp
C'est après cette ligne que je vais pouvoir ajouter mon "connect"

Il faut également que j'atoute un private slot au bon endroit et que je code la fonction void onOkButtonClicked();

Je vais donc modifier les deux fichiers : myqt4application.h et myqt4application.cpp de la façon suivante :

myqt4application.h
#ifndef MYQT4APPLICATION_H
#define MYQT4APPLICATION_H

#include <QtGui/QMainWindow>
#include "ui_myqt4application.h"

class MyQt4Application : public QMainWindow
{
Q_OBJECT

public:
MyQt4Application(QWidget *parent = 0, Qt::WFlags flags = 0);
~MyQt4Application();

// BRY
private slots:
     void onOkButtonClicked();

private:
Ui::MyQt4ApplicationClass ui;
};

#endif // MYQT4APPLICATION_H

myqt4application.cpp
#include "stdafx.h"
#include "myqt4application.h"

MyQt4Application::MyQt4Application(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);

// BRY
connect(ui.okButton, SIGNAL(clicked()), this, SLOT(onOkButtonClicked()));
}

MyQt4Application::~MyQt4Application()
{

}

// BRY
void MyQt4Application::onOkButtonClicked()
{
QMessageBox::information(this, tr("Signal connected on a button"),
                 "You clicked the OK button!");
}

Remarque :
Le tag // BRY est là pour repérer facilement les lignes que j'ai modifiées par rapport à mon application de base crée automatiquement par Qt4 Template Application

Le tour est joué, ça fonctionne :

Qt DialogBox
A DialogBox is connected to the Ok button
Great fun !

Qt Caratéristiques de Qt4 Application

Qu'est ce qui caractérise une application Qt C++ sous Visual Studio ?

Construction de l'application à l'initialisation :

Fichier : main.cpp

#include "stdafx.h"
#include "myqt4application.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQt4Application w;
w.show();
return a.exec();
}

La classe QApplication est définie dans :
c:\Qt\4.8.3\src\gui\kernel\qapplication.h

L'objet MyQt4Application est définit dans :
MyQt4Application\MyQt4Application\myqt4application.cpp

MyQt4Application::MyQt4Application(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}

La class QMainWindow est définit dans :
c:\Qt\4.8.3\src\gui\widgets\qmainwindow.h

MyQt4Application s'occupe de construire l'interface graphique à l'aide du fichier myqt4application.ui

Autrement dit, une Qt Application consiste a créer l'interface graphique à l'aide de son fichier de définitions .ui et à instancier une QApplication pour l'exécuter.

mercredi 28 novembre 2012

Qt Installation Version Commerciale

Je cherche à faire une installe de Qt pour Visual Studio 2010. En m'inscrivant sur le site de Nokia voir : Qt Introduction, j'ai récupéré l'exécutable :
qt-win-commercial-4.8.3-vs2010.exe

Je double-clique dessus pour l'installer  ...

Installation de Qt

Petite remarque sur le Menu Démarrer :
Je suis surpris quand l'installe me demande de choisir "le nom du répertoire du menu démarré dans lequel je souhaite mettre les raccourcis Qt". Comme c'est gentil mais n'ayant pas l'habitude de ce genre de délicatesse, à première vue je me demandais bien ce que c'était et puis j'ai laissé le nom proposé par défaut :
Qt by Digia v4.8.3 (VS2010 Commercial)

Tout se fait dans :
C:\Qt\4.8.3

C'est une installation monstrueuse qui se passe sans aucun soucis mais laisse 1,04 Go pour 44 089 Fichiers sur mon disque C:\

Et maintenant comment vais-je pouvoir développer ? Comment vais-je pouvoir créer mon premier projet avec Qt ?

Le menu Démarrer de Qt

L'install de Qt ajoute dans le menu démarrer : "Qt by Digia v4.8.3 (VS2010 Commercial)" les raccourcis suivants :

Assistant (C:\Qt\4.8.3\Bin) : Show Documentation in doc/html
Designer (C:\Qt\4.8.3\Bin) : Outil pour créer des formulaires (des forms ...)
Examples and Demos : (C:\Qt\4.8.3\Bin) qtdemo.exe Un launcher qui exécutes les exemples du répertoire C:\Qt\4.8.3\demos
Linguistic
Qt Command Prompt (C:\Windows\system32) 
Qt Readme (C:\Windows) : Fichier texte on y apprend : HOW TO REPORT A BUG
Visual Studio With Qt (C:\Qt\4.8.3\Bin) : un batch .bat qui va setter des variables d'environnement et lancer un bat de Visual Studio
call "c:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
Comme j'ai installé Visual Studio 2010 ce batch existe. Il s'occupe de tester le type de plateforme pour lancer à son tour de nouveau batch cela parait bien empirique ...

Qt VS Add-In Open Source

Autrement dit un Add-In pour Visual Studio ...

J'ai repéré cet Add-In pour Visual Studio page suivante :
http://qt-project.org/downloads
qt-vs-addin-1.1.11-opensource.exe

Je double clique dessus, il s'installe dans :
C:\Program Files\Digia\Qt4VSAddin

Il semble que l'instal se bloque dans :
Extract: qt_4_8_1.cab... 100%
Output folder: C:\Program Files\Digia\Qt4VSAddin\help\qt

Cliquez sur le bouton "Show details"

HelpLibManager.exe : le processus bloqué à 100% de cpu ! -> Terminer le processus
L'exécution de l'instal reprend et se termine !

Mais il semble que l'aide :
help\qt
et
help\qt4vs
soit restée bloquée dans les fichiers .cab !

Il me semble également que cet add-in ne soit compatible qu'avec VS 2005 et 2008 ... d'après des dires sur Internet. Cela ne semble pas très engageant et pourtant ...

Je relance mon Visual Studio pour voir si l'Add-In a joué les pères noël ... Could not connect to Appwrapper. Please make sure TCP port 12005 is not blocked.

Les voies de Qt sont impénétrables ...

Je relance mon VS histoire de voir si l'erreur se reproduit : que nénie rien ... je n'aime pas trop ça. Il se pourrait bien que l'instal du Qt Add-In for VS se soit mal passée.

Installation de Qt avec Visual Studio 2010

Pour utiliser Visual Studio 2010 avec Qt, j'ai trouvé cette page sur Internet :
http://www.siteduzero.com/tutoriel-3-36553-utiliser-qt-avec-visual-studio-2010.html

Mais alors là ! On fait tout à la mimine ! Au moins cela permet de comprendre un peu l'intégration de Qt avec VS.

Mais bref je relance mon VS pour voir si l'Add-In a ajouté quelque chose et là au miracle dans :
File->New project à la rubrique Installed Templates apparait une rubrique :
Qt4 Projects Added by Add-In
Qt4 Projects :
Qt Application
Qt Designer Pluggin
Qt Console Application
Qt Librairie
ActiveQtServer

Je choisis une Qt4 Application et le projet est créé :
Qt4 Application created by Add-In
Je Build et je lance en Debug, j'obtiens la fenêtre suivante :
My first Qt4 Application
Il semble que tout soit pour le mieux, je vais pourvoir commencer à développer en Qt4 avec mon Visual Studio 2010.

Have Fun !