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.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet