Per effettuare il download dei pacchetti .deb da dietro ad un http proxy server si deve configurare il file /etc/apt/apt.conf con la seguente riga
/etc/apt/apt.conf
-----------------------------------
Acquire::http::Proxy "http://mioproxy:8080/";
domenica 27 gennaio 2013
venerdì 25 gennaio 2013
SQLite in Qt
In questo post verra' presentato un esempio di utilizzo di Qt con Sqlite
Le librerie Qr hanno gia' al loro interno il supporto per Sqlite per cui non e' necessaria l'installazione di nessun componente aggiuntivo
Per prima cosa si deve modificare il file .pro per includere il supporto sql (come evidenziato in giallo nel listato sottostante)
sql.pro
--------------------------------------------
--------------------------------------------
L'esempio effettua tre query
Nella prima viene creata una tabella inserendo tre righe
Nella seconda viene effettuata una SELECT senza vincoli
Nella terza viene effettuata una SELECT condizionata da un WHERE
Il codice e' sostanzialmente autoesplicativo.L'unica cosa da sottolineare e' che in QtCreator sotto Windows si dove dichiarare un include <QtSql> mentre in Linux deve essere modificato in <QtSql\QtSql>
main.cpp
--------------------------------------------
--------------------------------------------
asd
Le librerie Qr hanno gia' al loro interno il supporto per Sqlite per cui non e' necessaria l'installazione di nessun componente aggiuntivo
Per prima cosa si deve modificare il file .pro per includere il supporto sql (come evidenziato in giallo nel listato sottostante)
sql.pro
--------------------------------------------
QT += core
QT += sql
QT -= gui
TARGET = sql
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
--------------------------------------------
L'esempio effettua tre query
Nella prima viene creata una tabella inserendo tre righe
Nella seconda viene effettuata una SELECT senza vincoli
Nella terza viene effettuata una SELECT condizionata da un WHERE
Il codice e' sostanzialmente autoesplicativo.L'unica cosa da sottolineare e' che in QtCreator sotto Windows si dove dichiarare un include <QtSql> mentre in Linux deve essere modificato in <QtSql\QtSql>
main.cpp
--------------------------------------------
#include <QtCore/QCoreApplication>
#include <Qtsql>
//per Linux si deve sostituire la riga precedente con
//#include <QtSql/QtSql>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("c:/punteggio.db");
if (!db.open()) {
return false;
}
QSqlQuery query;
query.exec("create table punteggio (id int primary key, "
"nome varchar(20), "
"punti int)");
query.exec("insert into punteggio values(0, 'Luca', 2)");
query.exec("insert into punteggio values(1, 'Federico', 102)");
query.exec("insert into punteggio values(2, 'Alessio', 15)");
QSqlQuery query2;
query2.prepare( "SELECT * FROM punteggio" );
if( !query2.exec() )
{
qDebug() << "Errore sulla query";
}
while( query2.next() )
{
int punti = query2.value(2).toInt();
QString nome = query2.value(1).toString();
qDebug() << nome << " " << punti << endl;
}
// SELECT CONDIZIONATA DA WHERE
QSqlQuery query3;
query3.prepare( "SELECT * FROM punteggio WHERE punti > ?" );
query3.bindValue(":punti",20);
if( !query3.exec() )
{
qDebug() << "Errore sulla query";
}
while( query3.next() )
{
int punti = query3.value(2).toInt();
QString nome = query3.value(1).toString();
qDebug() << nome << " " << punti << endl;
}
return a.exec();
}
--------------------------------------------
asd
Sqliteman in Debian
Al contrario di Ubuntu o di altre distro, non esiste un pacchetto gia' pronto per installare Sqliteman in Debian testing
La soluzione e' scaricare il pacchetto del sorgente del programma da Sourceforge (al momento la versione piu' recente e' sqliteman-1.2.2.tar.bz2)
dopo aver spacchettato l'archivio si entra nella directory e si procede con i seguenti comandi
apt-get install cmake
apt-get install libqscintilla2-8 libqscintilla2-dev
apt-get install sqlite3
La soluzione e' scaricare il pacchetto del sorgente del programma da Sourceforge (al momento la versione piu' recente e' sqliteman-1.2.2.tar.bz2)
dopo aver spacchettato l'archivio si entra nella directory e si procede con i seguenti comandi
apt-get install cmake
apt-get install libqscintilla2-8 libqscintilla2-dev
apt-get install sqlite3
cmake . (notare il punto dopo cmake)
make
make install
Sostituire HD con SSD su IBM X40
Per provare (ed anche perche' il disco fisso tradizionale stava dando segni di cedimento) mi sono comprato su Amazon un disco SSD Kingspec per sostituire il disco tradizionale dell'IBM X40
Lo smontaggio e' banale dato che il disco fisso e' fissato da una sola vite e si sfila mediante un sistema a slitta dopo aver rovesciato il portatile
La dimensione del disco fisso e' da 1.8 pollici. Nella foto sottostante si vede sopra a sinistra il disco originale, in alto a destra un disco derivante da un Ipod sempre in formato 1.8 pollici ma con un diverso sistema di connessione (flat e non PATA) mentre sotto il nuovo disco SSD
L'unico aspetto da considerare e' che il disco SSD ha bisogno della presenza del jumper che lo setti come Master del canale PATA (nel disco fisso originale non era presente nessun jumper e probabilmente era settato come cable select)
Lo smontaggio e' banale dato che il disco fisso e' fissato da una sola vite e si sfila mediante un sistema a slitta dopo aver rovesciato il portatile
![]() |
| Alloggiamento disco fisso su IBM X40 |
La dimensione del disco fisso e' da 1.8 pollici. Nella foto sottostante si vede sopra a sinistra il disco originale, in alto a destra un disco derivante da un Ipod sempre in formato 1.8 pollici ma con un diverso sistema di connessione (flat e non PATA) mentre sotto il nuovo disco SSD
L'unico aspetto da considerare e' che il disco SSD ha bisogno della presenza del jumper che lo setti come Master del canale PATA (nel disco fisso originale non era presente nessun jumper e probabilmente era settato come cable select)
giovedì 24 gennaio 2013
Leggere XML/KML con Qt
Lo scopo di questo programma e' estrarre i valori di latitudine e longitudine da un file kml (Google Earth) popolato di placemarks
Per prima cosa una precisazione: esistono due modi per creare file xml, nella prima il tag contiene l'informazione mentre nella seconda l'informazione e' racchiusa tra i tag
per esempio
caso 1 : <tag id="0"/>
caso 2 : <id>0</tag>
Il secondo caso corriponde a come sono formati i file xml per esempio dei servizi RSS e di Google Earth
Il motivo di questa precisazione risiede nel fatto che il metodo di lettura non e' valido per tutti i formati
Il tutorial di http://www.voidrealms.com (tutorial Qt 95) non interpreta correttamente il formato 2
kml.pro (importante modificare il file di progetto perche' si usa la libreria QtXml che non e' normalmente linkata)
-----------------------------------
#-------------------------------------------------
Per prima cosa una precisazione: esistono due modi per creare file xml, nella prima il tag contiene l'informazione mentre nella seconda l'informazione e' racchiusa tra i tag
per esempio
caso 1 : <tag id="0"/>
caso 2 : <id>0</tag>
![]() |
| Caso 1 |
![]() |
| Caso 2 (KML) |
Il secondo caso corriponde a come sono formati i file xml per esempio dei servizi RSS e di Google Earth
Il motivo di questa precisazione risiede nel fatto che il metodo di lettura non e' valido per tutti i formati
Il tutorial di http://www.voidrealms.com (tutorial Qt 95) non interpreta correttamente il formato 2
kml.pro (importante modificare il file di progetto perche' si usa la libreria QtXml che non e' normalmente linkata)
-----------------------------------
#-------------------------------------------------
#
# Project created by QtCreator 2013-01-23T10:12:21
#
#-------------------------------------------------
QT += core
QT += xml
TARGET = untitled
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
--------------------------
main.cpp
--------------------------
#include <QtCore>#include <QtXml>#include <QDebug>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);QString filename("C:/Casa.kml");QTextStream cout(stdout);QFile file(filename);bool open = file.open(QIODevice::ReadOnly | QIODevice::Text);if (!open){cout << "Couldn't open file" << endl;return 1;}else{cout << "File opened OK" << endl;}QXmlStreamReader xml(&file);qDebug() << "Encoding: " << xml.documentEncoding().toString() << endl;while (!xml.atEnd() && !xml.hasError()){xml.readNext();if (xml.isStartElement()){QString name = xml.name().toString();if ((name=="longitude") || (name == "latitude")){qDebug() << "element name: '" << xml.name().toString() << "'" << ", text: '" << xml.readElementText() << "'" << endl;}}else if (xml.hasError()){qDebug() << "XML error: " << xml.errorString() << endl;}else if (xml.atEnd()){qDebug() << "Reached end, done" << endl;}}return a.exec();}
--------------------------
cout in Qt
per avere un output su consolle da Qt si puo' procedere come segue
metodo C++
------------------------------------
#include <iostream>
metodo Qt
-------------------------------------
#include <QTextStream>
int main(int argc, char *argv[])
metodo C++
------------------------------------
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout << "Test cout";
return a.exec();
}
-------------------------------------metodo Qt
-------------------------------------
#include <QTextStream>
int main(int argc, char *argv[])
{
QTextStream cout(stdout);cout << "Couldn't open file" << endl;}
QDebug
Simile a Log.d di Android, in Qt esiste la possibilita' di mandare messaggi di debug durante l'esecuzione di un programma
L'utilizzo e' piuttosto semplice, per prima cosa si deve includere
di seguito nel corpo del programma si puo' richiamare la funzione
L'utilizzo e' piuttosto semplice, per prima cosa si deve includere
#include <QDebug>
di seguito nel corpo del programma si puo' richiamare la funzione
qDebug() << "Errore " << endl;
con la stessa sintassi di cout
Documentazione di Qt
La documentazione di Qt in Linux si ottiene includendo i pacchetti
apt-get install qt4-doc
apt-get install qtcreator-doc
dall'interno di QtCreator si accede alla documentazione con l'apposito pulsante sulla barra di sinistra
puo' accadere, come indicato nell'immagine, che il file della documentazione non sia indicizzato.
E' sufficiente attendere e riprovare per ottenere la ricerca per argomento su tutta la documentazione
apt-get install qt4-doc
apt-get install qtcreator-doc
dall'interno di QtCreator si accede alla documentazione con l'apposito pulsante sulla barra di sinistra
puo' accadere, come indicato nell'immagine, che il file della documentazione non sia indicizzato.
E' sufficiente attendere e riprovare per ottenere la ricerca per argomento su tutta la documentazione
Giove Luna ed Aldebaran nello stesso spicchio di cielo
In questi giorni nel cielo e' carino vedere la Luna insieme a Giove ed in basso la luce tremolante e rossastra di Aldebaran
Sviluppare in GTK su Linux e Windows
Per impostare un ambiente di sviluppo per GTK su Linux e Windows si devono seguire i seguenti passi:
Linux
Il metodo e' quantomai sbrigativo
apt-get install libgtk-3-dev
apt-get install anjuta
Windows
In questo caso la strada e' un po piu' lunga
Si devono prima scaricare i file
gtk+-bundle_2.24.10-20120208_win32
codeblocks-12.11mingw-setup_user
che corrispondono alle librerie (Gtk) ed all'editor (Codeblocks)
L'editor si installa come un normale programma mentre il file zip delle gtk deve essere decompresso (per esempio su C:\gtk)
In conclusione si deve aggiungere alla Path la directory c:\gtk\bin
A questo punto si lancia l'editor, si crea un nuovo progetto Gtk e quando si arriva alla schermata sottostante si imposta la directory dove e' stato scompattato il pacchetto delle librerie
Linux
Il metodo e' quantomai sbrigativo
apt-get install libgtk-3-dev
apt-get install anjuta
Windows
In questo caso la strada e' un po piu' lunga
Si devono prima scaricare i file
gtk+-bundle_2.24.10-20120208_win32
codeblocks-12.11mingw-setup_user
che corrispondono alle librerie (Gtk) ed all'editor (Codeblocks)
L'editor si installa come un normale programma mentre il file zip delle gtk deve essere decompresso (per esempio su C:\gtk)
In conclusione si deve aggiungere alla Path la directory c:\gtk\bin
A questo punto si lancia l'editor, si crea un nuovo progetto Gtk e quando si arriva alla schermata sottostante si imposta la directory dove e' stato scompattato il pacchetto delle librerie
Si precisa che nella versione per Windows non e' disponibile l'editor visuale delle form in quanto manca Glade
Vi e' inoltre da precisare che la versione di Gtk su Debian Testing e' la 3 mentre su Windows e' la versione 2
martedì 22 gennaio 2013
Asus A1300
Un altro portatile che mi e' passato per le mani in condizioni ormai rottamate e' l'Asus A1300
Peraltro mi e' arrivato sostanzialmente come se non fosse mai stato usato, lo chassis e' nuovo e privo di graffi ed anche la batteria (considerando l'eta') fa ancora il suo lavoro
Processore Intel Mobile Celeron 800 Mhz
Chipset SIS 630 con le soluzioni Intel
Memoria 128MB SDRAM on board, espansione fino a 384MB
Display 13,3" TFT LCD, XGA 1024x768, 64K colori
Grafica SXGA fino a 1280X1024 256/16,7M colori
PC card PCMCIA 2.1: 2 Card tipo II o 1 tipo III
Hard Disk Drive capacità 20GB
CD-ROM 24X o DVD-ROM 8X
Modem 56k S/W, LAN integrata (KN-133)
Audio full duplex, 3D sound, AC97
Batteria Li-Ion a 8 celle, 3700 mAh
Ventola di raffreddamento termo-controllata
Peraltro mi e' arrivato sostanzialmente come se non fosse mai stato usato, lo chassis e' nuovo e privo di graffi ed anche la batteria (considerando l'eta') fa ancora il suo lavoro
Come si vede dalla scheda tecnica sotto riportata non e' poi' cosi' male e si puo' provare a montare Linux
----------------------------------------------Processore Intel Mobile Celeron 800 Mhz
Chipset SIS 630 con le soluzioni Intel
Memoria 128MB SDRAM on board, espansione fino a 384MB
Display 13,3" TFT LCD, XGA 1024x768, 64K colori
Grafica SXGA fino a 1280X1024 256/16,7M colori
PC card PCMCIA 2.1: 2 Card tipo II o 1 tipo III
Hard Disk Drive capacità 20GB
CD-ROM 24X o DVD-ROM 8X
Modem 56k S/W, LAN integrata (KN-133)
Audio full duplex, 3D sound, AC97
Batteria Li-Ion a 8 celle, 3700 mAh
Ventola di raffreddamento termo-controllata
----------------------------------------------
HP 48gx
Chiamare un obsoleta una HP 48gx e' come offendere una vecchia e gloriosa signora che fa ancora il suo lavoro.
Questo esemplare lo ho acquistato per 10 euro ad una asta degli oggetti smarriti sui treni
Ad esclusione di un graffio sullo schermo l'oggetto e' sostanzialmente integro e funzionante
Visto che ormai e' difficile trovare il manuale cartaceo ai link sottostanti si puo' trovare il pdf
Link 1
Link 2
Questo esemplare lo ho acquistato per 10 euro ad una asta degli oggetti smarriti sui treni
Visto che ormai e' difficile trovare il manuale cartaceo ai link sottostanti si puo' trovare il pdf
Link 1
Link 2
Armada 1572
Mi e' arrivato come rottame un Compaq Armada 1572, un portatile decisamente scarso con un Pentium 233 MMX, 16 Mb di memoria ed un HD da 2.1 Gb .. beh escludiamo l'HD in quanto al primo tentativo di accensione il rumore prodotto dall'HD ha dimostrato che era chiaramente rotto (ascoltare il sonoro del video per avere un'idea)
ho provato ad avviare il CDRom con una distro Linux ma il BIOS (F10) non ha risposto per cui la macchina e' stata dichiarata morta e messa nel cimitero dei portatili (ci sara' un motivo per cui mi danno i portatili a gratis??)
L'asoetto curioso di questo portatile e' che non ha un alimentatore esterno, il cavo del 220 V entra direttamente nel portatile
ho provato ad avviare il CDRom con una distro Linux ma il BIOS (F10) non ha risposto per cui la macchina e' stata dichiarata morta e messa nel cimitero dei portatili (ci sara' un motivo per cui mi danno i portatili a gratis??)
L'asoetto curioso di questo portatile e' che non ha un alimentatore esterno, il cavo del 220 V entra direttamente nel portatile
Mandelbrot in QT
Un classico di questo blog ovvero disegnare l'insieme di Mandelbrot con varie librerie grafiche
Per questo esempio e' stata usata come base il post "Disegnare in QT" con la differenza che in questo caso non vengono disegnate linee bensi' punti
il trucco per disegnare punti risiede nella linea che e' stata evindeziata in colore giallo ovvero utilizzando una primitiva di una ellisse di raggio molto piccolo
dialog.cpp
---------------------------------------------------
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
int SCREEN_WIDTH = 640;
int SCREEN_HEIGHT = 480;
float a,b;
float x,y,x_new,y_new;
int k,j,i,test;
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
QBrush brush(Qt::black);
QPen penna(Qt::black);
penna.setWidth(1);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
test = k;
if (k%2 == 0)
scene->addEllipse(j,i,0.1,0.1,penna,brush);
break;
}
x = x_new;
y = y_new;
}
}
}
//linea = scene->addLine(100,100,100,100,penna);
}
Dialog::~Dialog()
{
delete ui;
}
Per questo esempio e' stata usata come base il post "Disegnare in QT" con la differenza che in questo caso non vengono disegnate linee bensi' punti
il trucco per disegnare punti risiede nella linea che e' stata evindeziata in colore giallo ovvero utilizzando una primitiva di una ellisse di raggio molto piccolo
dialog.cpp
---------------------------------------------------
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
int SCREEN_WIDTH = 640;
int SCREEN_HEIGHT = 480;
float a,b;
float x,y,x_new,y_new;
int k,j,i,test;
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
QBrush brush(Qt::black);
QPen penna(Qt::black);
penna.setWidth(1);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
test = k;
if (k%2 == 0)
scene->addEllipse(j,i,0.1,0.1,penna,brush);
break;
}
x = x_new;
y = y_new;
}
}
}
//linea = scene->addLine(100,100,100,100,penna);
}
Dialog::~Dialog()
{
delete ui;
}
Iscriviti a:
Post (Atom)
LLama3 Anita
A seguito di questo post ho provato a vedere ho provato a vedere cosa accadeva ad utilizzare un modello specifico per la lingua italiana in...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...













