giovedì 30 settembre 2010

Qt: QTableView con righe vuote/bianche

Problema: una tabella di tipo QTableView, dopo una query di tipo select, presenta occasionalmente righe vuote in più


Soluzione: questo succede quando la precedente invocazione di setFilter() ha dato un risultato nullo, ovvero la select usata non ha restituito alcuna riga.

- select 1 sulla tabella -> risultato vuoto -> setFilter(vuoto) = tabella vuota
- select 2 sulla tabella -> risultato pieno -> setFilter(pieno) = tabella con righe della select + righe vuote

Per ovviare a questo noto problema basta imporre una condizione: se una qualsiasi select dà un risultato nullo, non applicare il filtro sulla tabella.

if(query.next())
    setFilter(condizione);
else
    QMessageBox::warning(0,"Attenzione","Nessun risultato trovato");

giovedì 23 settembre 2010

Qt: mingw32\bin\ld.exe: cannot find -lqtmaind

Problema: compilando un progetto con C++/Qt alla fine compare il seguente messaggio di errore:

    mingw32\bin\ld.exe: cannot find -lqtmaind


Soluzione: se siete nuovi alle librerie grafiche Qt, probabilmente non sapete che esistono due tipi di compilazione: Debug e Release.

La differenza principale fra le due è che la modalità Debug include alcune informazioni supplementari che permettono al debugger di tenere traccia del comportamento dell'applicazione a runtime, permettendo di capire gli errori di eventuali crash.

La Release mode non si occupa di questo, perciò la compilazione è più veloce, il codice è ottimizzato, e l'eseguibile finale ha una dimensione nettamente minore rispetto alla Debug mode.

I nomi difatti rispecchiano le loro funzioni: la compilazione Debug dovrebbe servire in fase di sviluppo del progetto; la Release serve a compilare il programma finale, poco prima della distribuzione.

E cosa centra l'errore con tutto questo?

Le librerie Qt vengono distribuite compilate in Release mode (anche per ridurre il peso da scaricare), di conseguenza non sono adatte alla compilazione Debug di default. Se volete usare questa modalità dovete andare su:

    Start > Tutti i programmi > cartella Qt

e cercare una voce simile a "Build Debug Libraries". Vi avviso che l'operazione è piuttosto lunga, anche di qualche ora.

Perciò se non avete voglia di aspettare, vi consiglio di compilare sempre in Release mode, settandola sotto la tab "Projects" di Qt Creator, oppure aggiungendo la specifica CONFIG+=release nello step QMake.

Qt: il progetto si compila sempre tutto!

Problema: Un progetto compilato in C++/Qt si ricompila ogni volta tutto, compilando anche files che non sono stati modificati dall'ultima volta.


Soluzione: se guardate ai vostri files di progetto, probabilmente presentano una data antecedente a quella del file progetto .pro. Questo perché magari avete modificato la data di sistema e poi compilato il progetto.

La soluzione è molto semplice e si chiama Touch 3.0. Con questo programma potete modificare qualsiasi attributo cronologico dei vostri files, compresa data di creazione, modifica e ultimo accesso, ad un singolo file, ad un gruppo di files, o anche di un'intera cartella con files in sottocartelle. Insomma, davvero efficace e ben fatto.

Il link per scaricarlo è il seguente: Touch 3.0

Dopo averlo installato basta modificare la data di tutti i files del progetto a quella attuale. Poi non avrete più problemi.