domenica 31 maggio 2009

Disegnare 2d con Qt4

Facciamo una piccola divagazione rispetto alla gestione dei Todo.
Con le Qt è molto semplice anche disegnare in 2D.


Per disegnare una linea o un cerchio come quelli appena mostrati il procedimento è molto semplice.

Cominciamo con il mostrare per intero il codice:
void MainWindow::paintEvent(QPaintEvent * event)
{
QPainter painter( this );
painter.setPen(QColor(255,0,0));
painter.drawLine(QPointF(0,0),QPointF(50,50));
QRectF rect (60,60,100,100);
QPainterPath path (QPointF(100,100));

path.addEllipse(rect);
painter.fillPath(path,QColor(0,255,0));
}


Per prima cosa va fatto l'override del metodo paintEvent() proprio dei widget.

painter.setPen(QColor(255,0,0));
painter.drawLine(QPointF(0,0),QPointF(50,50));

Con queste due semplici linee di codice è molto semplice disegnare e definire anche la formattazione.
Per riempire invece un tondo bisogna creare un QPainterPath, ovvero un insieme di primitive di disegno da disegnare tutte insieme.
Queste semplici istruzioni sono ovviamente utilizzabili ovunque e il metodo paintEvent è reimplementabile in ogni componente per poterne definire lo stile di disegno.

Buon divertimento :)

mercoledì 27 maggio 2009

Android Developer Challenge il ritorno

Visto l'incredibile successo della prima edizione, e la discreta diffusione del nuovo sistema operativo per palmari e smart phone, prossimamente anche per netbook, Google ha deciso di fare una nuova edizione del concorso per sviluppatori di applicazioni per la sua piattaforma.



Le categorie di sviluppo restano pressochè le solite. Qui la pagina dove viene presentato il nuovo concorso.

Questa volta speriamo di poter partecipare anche noi italiani.

sabato 23 maggio 2009

Altra occasione persa

La newsletter italiana di Ubuntu diventa ogni settimana più interessante anche se ogni tanto riporta una brutta, anzi bruttissima notizia, come questa.

Se seguite questo link, potrete leggere che il comitato delle olimpiadi ha detto no ai formati aperti e open source per il sistema informatico delle olimpiadi.

Ciò mi porta a una riflessione molto seria. Da una parte l'insensata ostinazione a rinunciare ai formati proprietari in un momento di crisi come questo. Dall'altra però anche questa rinuncia potrebbe voler dire che c'è bisogno di un'offerta più aggressiva per poter invertire le tendenze.

Io penso che è questo il momento di spingere sull'acceleratore, però l'acceleratore va spinto sul serio, con una proposta compatta e convincente che spinga anche gli ultimi "anacronistici" scettici a passare all'open source.

sabato 16 maggio 2009

NetBeans, la strada verso la 6.7

NetBeans è un IDE completo e molto potente che si basa su tecnologia Java, ma permette di svillupare, praticamente, in tutti i principali linguaggi di programmazione.

Possiamo già scaricare la beta della nuova versione, 6.7, che contiene delle succose novità.
La prima che mi è saltato all'occhio è il supporto alle librerie Qt, che stanno prendendo sempre più campo.

Da questo link è possibile raggiungere la notizia del rilascio e il link per scaricare la beta, per quanto mi riguarda già in download.

martedì 12 maggio 2009

Mozilla Prism 1.0 beta

L'avevo già presentato un po' di tempo fa sempre su questo blog.

Si tratta di un programma che consente di utilizzare le applicazioni web come applicazioni studiate per il desktop.

Ora Prism è giunto alla versione 1.0 beta e bisogna assolutamente testarne le novità e soprattutto il modo innovativo di utilizzare le web application.

Ecco il post dell'annuncio: link.

lunedì 11 maggio 2009

Laboratorio Programmazione di Rete Open

Oggi è stato completato l'esame di Laboratorio di Programmazione di rete.

Pubblichiamo quindi il codice che è già presente su internet dall'inizio del progetto.
E' possibile quindi scaricarlo, testarlo e utilizzarne il codice.

Se individuate dei problemi potete sempre inserire una "issue" nel pannello delle segnalazioni, ne saremo veramente grati.

Cliccate qui per andare al sito "ufficiale" del progetto.

sabato 2 maggio 2009

Qt Tutorial - QToDo

È già da un po' che pensavo a un piccolo programmino da fare per poter esplorare le librerie Qt stimolato da qualcosa. Quel giorno è arrivato.

Ho pensato a un piccolo programmino che consenta di gestire il ToDo. Non solo per i programmatori, ma una sorta di organizzazione per tutti i gusti.
Per lo sviluppo di questa piccola applicazione utilizzeremo QtCreator 1.1.0 che fornisce tutti gli strumenti utili.
È possibile scaricare l'IDE da qua.

Comiciamo con il creare la form come avevo già mostrato tempo fa sempre su questo blog.

Creiamo una form con i seguenti componenti:
  1. QTreeWidget lista todo

    1. è possibile creare una QTreeView e poi trasformarla in QTreeWidget con il tasto destro e poi cliccando su change into-> tree widget

    2. Nome dell'oggetto: todoList

  2. PushButton con label Aggiungi e objectName add_bt

  3. PushButton con label Rimuovi e objectName remove_bt

  4. Horizontal separator da posizionare alla sinistra del pulsante "Rimuovi"


Dopo aver inserito tutti questi componenti sistemiamo il layout selezionando i due bottoni e il separator e poi cliccando su Layout Horizzontally in alto.

Poi fare click sulla form e cliccare su Grid Layout sempre nella solita barra.
Si otterrà pressochè il seguente risultato:

Ora andiamo a creare gli slots per gli eventi dei due pulsanti.
Nel file mainwindow.h modifichiamo il codice portandolo nelle seguente forma:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QtGui/QTreeWidgetItem>
#include <QtGui/QInputDialog>

namespace Ui
{
class MainWindowClass;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_add_bt_clicked();
void on_remove_bt_clicked();

private:
Ui::MainWindowClass *ui;
};

#endif // MAINWINDOW_H

Innanzitutto occorre modificare il costruttore per fare in modo che il treewidget abbia una sola colonna che si chiama "Activity".
Lo si fa con il codice presentato di seguito da inserire nel costruttore.
 ui->todoList->setObjectName(QString::fromUtf8("treeWidget"));
ui->todoList->setColumnCount( 1 );

ui->todoList->headerItem()->setText( 0, QApplication::translate( "widget", "Activity",
0, QApplication::UnicodeUTF8 ) );

Ora andiamo a creare le due funzioni nel file mainwindow.cpp

Per prima cosa creiamo la funzione che aggiunge un item sotto a quello selezionato nell'albero.
Lo facciamo salvandoci nella variabile selected la selezione dell'utente e poi richiamando una QInputDialog che farà inserire all'utente una stringa tramite la funzione getText().
Dopo di che creiamo un QTreeWidgetItem e gli assegnamo come parent la root del widget se non è selezionato alcun item, altrimenti gli assegnamo come parent il primo elemento che si trova nella selezione, selected[0].

Ecco il codice che fa tutto questo.
void MainWindow::on_add_bt_clicked()
{
QList<QTreeWidgetItem *> selected = ui->todoList->selectedItems();
bool ok;
QString text = QInputDialog::getText(this,QString("Inserisci attività"),QString("Inserisci nuovo ToDo nella lista:"),QLineEdit::Normal,QString(""),&ok);
QTreeWidgetItem * i;
if(selected.length() > 0)
i = new QTreeWidgetItem(selected[0],0);
else
i = new QTreeWidgetItem(ui->todoList,0);

i->setText(0,text);
}


Andiamo ora a scrivere la seconda funzione, quella che rimuove l'item selezionato nell'albero.
Ovviamente se non ci sono item selezionati non si fa nulla. Se invece si ha un item selezionato lo si rimuove semplicemente invocando il suo distruttore come mostrato sotto.
{
QList <QTreeWidgetItem *> selected = ui->todoList->selectedItems();

if(selected.length() > 0)
selected[0]->~QTreeWidgetItem();

}


Se ora si prova a compilare ed eseguire si avrà più o meno il risultato che segue.


Sicuramente avrete notato che nella grafica finale c'è anche il menù file nella barra dei menu. Ma di questo parliamo la prossima volta ;)