vendredi, juin 17 2005

Qt - stage 2

Comme une image est souvent plus parlante...

Ça m'a pris une heure, montre en main. Il est vrai que mon code n'est pas très beau, que j'ai des fonctions qui se ressemblent beaucoup. Mais tout de même... mon application ne se connecte à PostgreSQL qu'à partir du moment où je clique sur le bouton « Se connecter » puis elle remplit les quatres tableaux avec les valeurs attendues. Les champs booléans disposent de cases à cocher, plutôt que d'un texte indiquant si l'option est active ou non.

Je ne pensais pas que cela serait aussi rapide et aussi simple :)

Il faudrait maintenant que j'affiche aussi les stats une fois une base de données sélectionnée... ça attendra demain. Là, je vais aller me coucher.

Qt - stage 1

En dehors de la réunion du CA ce soir, j'ai de nouveau attaqué un peu Qt. Je suis très étonné d'arriver à faire un petit programme simple en si peu de temps. J'avais peur que cela soit une galère en C++ mais j'arrive à me débrouiller plutôt bien.

J'ai créé une classe représentant ma fenêtre. L'application se connecte à une base de données PostgreSQL, récupère la version du serveur, lance une requête sur la table des adhérents de galette et les affiche dans un tableau. Ça n'est pas aussi simple que cela paraît mais j'ai mis peu de temps. Je ne pense pas que j'aurais été plus vite en PHP ou en VC++. Voici le code de ma classe :

#include "pggl.h"

#include <qapplication.h>
#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <qlabel.h>
#include <qtable.h>


pggl::pggl(QWidget* parent, const char* name, WFlags fl)
    : Form1(parent,name,fl)
{
    db = QSqlDatabase::addDatabase("QPSQL7");
    db->setDatabaseName("galette");
    db->setUserName("guillaume");
    db->setPassword("");
    db->setHostName("localhost");

    if ( ! db->open() ) {
      qWarning( "Failed to open database : " + db->lastError().text() );
    }

    QSqlQuery query( "SELECT version()", db );
    if ( query.isActive() ) {
      query.next();
      lblVersion->setText(query.value(0).toString());
    }
}

void pggl::initialiseTable()
{
    int i = 0;
    QSqlQuery query2( "select nom_adh, prenom_adh, ville_adh, activite_adh from adherents ", db );
    table1->setNumRows(query2.size());
    table1->setNumCols(4);
    table1->setColumnMovingEnabled(true);
    table1->setShowGrid(false);
    table1->setSelectionMode(QTable::SingleRow);
    table1->setReadOnly(true);
    table1->verticalHeader()->hide();
    table1->setLeftMargin(0);
    QHeader *header = table1->horizontalHeader();
    header->setLabel( 0, "Nom" );
    header->setLabel( 1, "Prénom" );
    header->setLabel( 2, "Ville" );
    header->setLabel( 3, "Actif" );

    QCheckTableItem* chk;

    while ( query2.next() ) {
      table1->setText( i, 0, query2.value(0).toString() );
      table1->setText( i, 1, query2.value(1).toString() );
      table1->setText( i, 2, query2.value(2).toString() );
      chk = new QCheckTableItem( table1, "");
      chk->setChecked( query2.value(3).toBool() );
      table1->setItem( i, 3, chk );
      i++;
    }
}

Bref, simple, facile, rapide... ceci dit, j'arrive quand même à ajouter des cases à cocher dans mon tableau, à autoriser le drag and drop parmi les colonnes, etc. Je suis incapable de faire cela en VB ou en VC++.

Évidemment, ce n'est qu'un début. Je ne suis pas très à l'aise en C + +. L'aide sur les API de Qt est remarquable. Le site « The Code Skipper » est très utile. Je me lance donc dans un projet : recoder phpPgInfo en C + +/Qt. Un projet assez simple, mais qui va me permettre d'apprendre des tas de choses... et c'est tant mieux.

vendredi, mars 25 2005

Qt

dup se met à gtk+. Pour moi, ce sera Qt.

L'intérêt de Qt est son côté multiplateforme. J'aimerais bien qu'on l'utilise au boulot pour remplacer un couple de perdants (à savoir VB6/VC6). Donc, je m'y mets, je teste, je lis des tutoriaux. Parmi ceux-ci, je conseille ceux publiés dans GNU/Linux France Magazine. Les huits premiers articles sont disponibles en ligne. Il y a aussi le tutoriel indépendant de Qt. Depuis facilement deux ans, je ne faisais que des traductions. Du coup, ça me plaît beaucoup d'apprendre de nouveau quelque chose : nouveau langage de programmation (je connais assez peu le C++), nouvelle bibliothèque graphique (Qt)... ça me rappelle il y a cinq ou six ans quand je me suis mis à travailler sur le HTML et le PHP... que du bonheur :)

Il me faudra un peu de temps avant d'avoir sur Qt l'aisance que j'ai avec PHP mais je pense que ça va être passionnant. J'ajouterais un peu plus d'infos sur ce qui me plaît dans Qt dans d'autres billets.