Un argomento che capita di discutere spesso e' come fare ad iterare fra gli elementi di una combo box, ed eventualmente selezionarne uno o aggiungerlo qualora non sia gia' presente. Ecco la mia personale soluzione.
domenica 16 ottobre 2011
venerdì 14 ottobre 2011
Se ne va un genio
int main(int argc, char** argv){
printf("Bye Bye World!");
}Mentre il mondo è ancora intento a compiangere Steve Jobbs un altro grande genio dell'informatica ci ha lasciati, in modo piu' silenzioso e discreto.
Non è finito sulla bocca di tutti, e molti pensano che non sia finito nemmeno nelle case di tutti. Eppure gli addetti ai lavori sanno che ormai ogni appliance si basa su una sua idea in particolare: Unix.
Grazie di tutto Dennis!
mercoledì 12 ottobre 2011
Qt: Login Dialog con selezione di username da una lista
Ho realizzato una dialog per effettuare il login utente. La dialog in questione consente di inserire username e password manualmente, ma permette anche di specificare una lista di username fra i quali scegliere (es. per lista di utenti prelevata da un database o da impostazioni salvate in precedenza).
Di seguito uno screenshot della dialog, e qui si trova il codice di implementazione.
lunedì 10 ottobre 2011
Qt: centrare una finestra nello schermo
In questo articolo sul Wiki Qt illustro come si possa centrare e dimensionare automaticamente una window sullo schermo. L'esempio in particolare centra e imposta al 90% dello spazio disponibile sullo schermo corrente la finestra. Occorre prestare attenzione all'uso dello schermo corrente (sistemi multischermo e/o multidesktop) e al fatto che la dimensione disponibile non include le eventuali barre/dock visualizzate. Ne consegue che nell'esempio riportato il 90% non è relativo all'intera superficie disegnabile, ma a quella principale del desktop.
venerdì 7 ottobre 2011
PgDay 2011: sempre piu' vicino!
Manca ormai poco piu' di un mese al nuovo PgDay, il quinto, che torna dopo due anni nella sua sede storica di Prato. Sono disponibili i banner per i blog, quindi se si vuole pubblicizzare l'evento non si ha che da incollare uno dei banner disponibili sul proprio sito.
mercoledì 5 ottobre 2011
QPushButton & QAction
Con rammarico e stupore ho scoperto che in Qt i pulsanti QPushButton non possono essere collegati a delle azioni QAction. La cosa è abbastanza strana perche' grosso modo in ogni toolkit grafico che conosco i pulsanti sono configurabili tramite delle azioni. Ovviare al problema non è particolarmente complesso:
- si definisce una estensione di QPushButton
- si implementa un metodo per associare al pulsante l'azione e si configura il pulsante di conseguenza
- si collega ogni evento di modifica dell'azione all'aggiornamento del pulsante
- si collega l'evento di click del pulsante al trigger dell'azione.
Il codice completo del pulsante, che ho chiamato ActionButton lo si può trovare nel wiki ufficiale Qt.
sabato 1 ottobre 2011
Qt: reboot automatico dell'applicazione
Una delle cose molto comode che il framework Eclipse RCP fornisce out-of-the-box è la capacità di riavviare automaticamente una applicazione. Qt non fornisce nulla del genere, ma non è difficile implementare un meccanismo per il reboot. In questo articolo sul Wiki ufficiale descrivo come implementare efficacemente il reboot. I passi fondamentali sono:
- creare una costante che sia associata al valore di uscita reboot
- modificare il ciclo di vita dell'applicazione (main) affinche' usi un loop per processare l'applicazione. Il loop non termina fino a che il valore di uscita dell'applicazione non e' diverso dal valore di reboot.
- creare uno slot (ad esempio nella propria main window) per effettuare il reboot.
- creare una azione per gestire il reboot e connetterla allo slot di cui sopra.
Il nuovo ciclo main (punto 2) risulta quindi simile al seguente:
int main(int argc, char *argv[])
{
int currentExitCode = 0;
do{
QApplication a(argc, argv);
MainWindow w;
w.show();
currentExitCode = a.exec();
}while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );
return currentExitCode;
}
{
int currentExitCode = 0;
do{
QApplication a(argc, argv);
MainWindow w;
w.show();
currentExitCode = a.exec();
}while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );
return currentExitCode;
}
ove ovviamente EXIT_CODE_REBOOT e' la costante definita ed opportunamente inizializzata. La MainWindow avra' uno slot (punto 3) simile al seguente:
void MainWindow::slotReboot()
{
qDebug() << "Performing application reboot..";
qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}
{
qDebug() << "Performing application reboot..";
qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}
e l'azione (punto 4) che gestisce il reboot sara' come la seguente:
actionReboot = new QAction( this );
actionReboot->setText( tr("Restart") );
actionReboot->setIcon( QIcon(":/actions/img/reboot.png" ) );
actionReboot->setStatusTip( tr("Restarts the application") );
connect( actionReboot,
SIGNAL(triggered()),
this,
SLOT(slotReboot()) );
Iscriviti a:
Post (Atom)