Building Qt projects

Vediamo ora nel dettaglio come compilare un progetto con Qt tra quelli contenuti negli esempi, come provarlo sul nostro desktop e come generare l’eseguibile per ARM. Se Qt Creator è stato installato correttamente, al suo avvio dovremmo vedere questa finestra:


Cliccando su HelpàAbout Qt Creator…, apparirà la seguente popup:


Infine cliccando su HelpàAbout Plugins…, apparirà la seguente lista:


Se clicchiamo sul tab Examples in alto a destra, verranno visualizzati tutti gli esempi inclusi nell’installazione di Qt:

Proviamo a scorrere l’elenco e scegliamo Completer Example, apparirà una popup per avvisarci che l’esempio è contenuto in una cartella non scrivibile, chiedendoci se desideriamo copiarla in un’altra locazione a scelta per poi aprirla. Scegliamo il nostro percorso e clicchiamo sul tasto Copy Project and Open.

A questo punto il progetto andrà configurato, cliccando sull’icona del computer, in basso sulla sinistra (Compile Output pane):

Scegliamo di configurare il progetto sia per il nostro Desktop che per Embedded Linux, creando cartelle separate per ciascuna versione:

A questo punto, sempre dal Compile Output pane, potremo scegliere sia il Target che la Build:


Proviamo innanzi tutto la versione per il nostro desktop, scegliendo, come Target, Desktop, e come Build Qt 4.8.2 Debug, nel caso volessimo provare a prendere dimestichezza con il debugger (breakpoints e quant’altro). Diamo il comando di Run (Ctrl+R), cliccando il triangolino verde in basso a sinistra, e, dopo il build, dovremmo vedere apparire la finestra dell’applicazione Completer sul nostro desktop.

Cambiamo Target e Build, sempre dal Compile Output pane, selezionando rispettivamente Embedded Linux e Qt 4.8.2 Release (attenzione a scegliere quello per ARM).

Lanciamo la build del progetto (Ctrl+B), cliccando sul tab BuildàBuild Project “completer”, in alto a destra e otterremo l’eseguibile per ARM, verificando nella finestra Compile Output che non ci siano stati errori durante la compilazione.




Un passo avanti

Proviamo ora a generare una widget che interagisca maggiormente con la scheda Micro2440, in grado di visualizzare, ad esempio, le letture del convertitore A/D, sfruttando il device driver nativo.

Abbiamo già visto come compilare e far girare un semplice programma in C (adc-test), in grado di effettuare le letture del convertitore A/D AIN0 e visualizzarle sulla console. Sfruttiamo adesso quel codice per integrarlo in una widget Qt.

Con Qt creator apriremo una nuova applicazione Qt Gui, che chiameremo adclcd, nel menu Class Informations, definiamola come widget, senza form.


Qt Creator avrà creato la cartella adclcd, contenente i file: adclcd.h, adclcd.cpp, main.cpp, Makefile.

Modifichiamo i sorgenti nel seguente modo:

adclcd.cpp:
/****************************************************************************
** ==== adclcd ====
**
** This program demonstrates how to display, in a LDC fashion widget, the
** samples of the Micro2440 AD converter, using Qt libraries and the linux
** driver: /dev/adc
**
****************************************************************************/
#include "adclcd.h"
#include <fcntl.h>
#include <QtGui>
// Open ADC device, set periodic call to showADC()
void adclcd::adclcd(QWidget *parent)
    : QLCDNumber(parent)
{
    setSegmentStyle(Filled);
    QString text;
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(showADC()));
    setWindowTitle(tr("ADC VOLTS"));
    resize(300, 120);
    fd = open("/dev/adc", 0);
    if (fd < 0) {
        text = "8888"; // open ADC device error
        display(text);
    } else {
        timer->start(500);
        showADC();
    }
}
// Performs a read of ADC value and displays it
void adclcd::showADC()
{ 
    QString text;
    len = read(fd, buffer, sizeof buffer -1);
    if (len > 0) {
        buffer[len] = '\0';
        value = -1;
        sscanf(buffer, "%d", &value);
        d = (float)value/100; // convert to float
        text = QString("%1").arg(d, 0, 'f', 2);
        //text = text.setNum(value);
    } else {
        text = "9999"; // read ADC device error
    }
    display(text);
}


adclcd.h:
/****************************************************************************
** ==== adclcd ====
**
** This program demonstrates how to display, in a LDC fashion widget, the
** samples of the Micro2440 AD converter, using Qt libraries and the linux
** driver: /dev/adc
**
****************************************************************************/
#ifndef adclcd_H
#define adclcd_H
#include <QLCDNumber>

class adclcd : public QLCDNumber
{
    Q_OBJECT
public:
    adclcd(QWidget *parent = 0);
private slots:
    void showADC();
private:
    char buffer[30];
    int fd;
    int len;
    int value;
    double d;
};
#endif


main.cpp:
/****************************************************************************
** ==== adclcd ====
**
** This program demonstrates how to display, in a LDC fashion widget, the
** samples of the Micro2440 AD converter, using Qt libraries and the linux
** driver: /dev/adc
**
****************************************************************************/
#include <QApplication>
#include "adclcd.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    adclcd adcwid;
    adcwid.show();
    return app.exec();
}

Impostiamo Target e Build, dal Compile Output pane di Qt Creator, selezionando rispettivamente Embedded Linux e Qt 4.8.2 Release (attenzione a scegliere quello per ARM), e lanciamo il Build del progetto adclcd.

Trasferiamo l'eseguibile e lo script di lancio, così come descritto qui. Lanciamo l'applicazione e verifichiamo che appaia la widget:


Ruotando il trimmer presente sul lato destro della scheda, dovremmo veder variare i valori di lettura.
(to be continued)

1 commento:

  1. Thank You for your tutorial really helpful.
    The problem I am facing is I am getting fluctuating values on screen and there is no effect on readings of varying potentiometer(POT).
    Do you have any solution.

    RispondiElimina