In questo post viene mostrata la connessione e l'esecuzione di query da Qt verso un database MysqlS riprendendo le basi gia' poste nel post SQlite
In sostanza deve essere modificata solo la parte relativa alla connessione mentre l'esecuzione delle query e' sostanzialmente identica
(come sempre si deve modificare il file .pro aggiungendo la libreria sql con il comando
QT += core gui sql
)
--------------------------------------------
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("");
if (db.open()) {
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)");
db.close();
}
lunedì 28 gennaio 2013
domenica 27 gennaio 2013
Root in read only mode in Debian
Per cercare di migliorare le prestazioni del disco SSD mi sono messo a modificare il file fstab
Disgraziatamente ho scritto
/dev/sda / ext4 noatime,nodirtime,discard,errors=remount-ro 0 1
e non (si noti la mancanza di una a nel secondo parametro)
/dev/sda / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
al successivo riavvio la macchina e' partita andando pero' in schermo nero al momento di far partire la sessione X. Fortunatamente le shell erano ancora attivi quindi da Alt+F2 e' stato possibile vedere che il filesystem era stato montato come in sola lettura
Dopo vari tentativi la soluzione funzionante e' stata di digitare in consolle di shell il comando
mount -n -o remount,defaults /dev/sda1 /
a questo punto il filesystem e' tornato scrivibile, ho corretto fstab e fatto ripartire la macchina
Tutto e' tornato a funzionare perfettamente
Disgraziatamente ho scritto
/dev/sda / ext4 noatime,nodirtime,discard,errors=remount-ro 0 1
e non (si noti la mancanza di una a nel secondo parametro)
/dev/sda / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
al successivo riavvio la macchina e' partita andando pero' in schermo nero al momento di far partire la sessione X. Fortunatamente le shell erano ancora attivi quindi da Alt+F2 e' stato possibile vedere che il filesystem era stato montato come in sola lettura
Dopo vari tentativi la soluzione funzionante e' stata di digitare in consolle di shell il comando
mount -n -o remount,defaults /dev/sda1 /
a questo punto il filesystem e' tornato scrivibile, ho corretto fstab e fatto ripartire la macchina
Tutto e' tornato a funzionare perfettamente
Apt dietro ad un proxy server
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/";
/etc/apt/apt.conf
-----------------------------------
Acquire::http::Proxy "http://mioproxy:8080/";
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();
}
--------------------------
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
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...