cta

Mattepuffo's logo
QML ListView: righe a colori alterni

QML ListView: righe a colori alterni

In questo articolo avevamo visto come riempire una ListVew con dati in formato JSON.

Oggi piccolo tip: vogliamo impostare i le righe con colori alternati.

La cosa in verità è molto semplice, e basta impostare il parametro color all'oggetto Rectangle interno.

Mattepuffo's logo
QML ListView da JSON

QML ListView da JSON

Oggi vediamo come riempire una ListView in QML prendendo i dati in formato JSON dal web.

Per prendere i dati useremo Javascript e AJAX.

Questa è una delle cose che mi piace di più di QML: usare Javascript in una app per desktop!

Prima di tutto vediamo il file main.qml, dove c'è tutta la parte grafica:

import QtQuick 2.0
import QtQuick.Controls 1.0
import "script.js" as Script

ApplicationWindow {
    id: mainWindow
    title: "App"
    visible: true
    width: 600
    height: 600

    Component.onCompleted: Script.load()

    ListModel { id: listModelJson }

    Rectangle {
        height: parent.height
        width: parent.width
        ListView {
            id: listViewJson
            x: 0
            y: 0
            width: 600
            height: 592
            delegate: Rectangle {
                width: parent.width
                height: 70
            }
            model: listModelJson
        }
    }
}

Come vedete tra gli import c'è anche il nostro file Javascript (che dopo andremo a creare).

Mattepuffo's logo
Usare le MenuBar in QML

Usare le MenuBar in QML

QML consente di scrivere applicazioni Qt usando un linguaggio simile a Javascript, misto alle classi C++ del framework.

Molto interessante, soprattutto per chi conosce bene Javascript.

Oggi vediamo come usare il componente MenuBar in una applicazione Qt Quick.

Una volta creato un progetto Qt Quick Application con Qt Creator, ci ritroviamo il file main.qml con un oggetto Rectangle.

Per usare le MenuBar dobbiamo però passare a ApplicationWindow, e questo comporta qualche modifica al progetto iniziale.

Mattepuffo's logo
Usare i ProgressDialog in Android

Usare i ProgressDialog in Android

I ProgressDialog sono molto usati anche in ambito mobile, in quanto consentono di "bloccare" lo schermo avvertendo l'utente quando una determinata operazione finisce.

In generale la sequenza per usare questo oggetto è questa:

ProgressDialog pd = new ProgressDialog(Activity.this);
pd.setMessage("loading...");
pd.show();
// DO STUFF
pd.dismiss();

In sostanza, creiamo il dialog, lo avviamo, eseguiamo le operazioni e lo chiudiamo.

Mattepuffo's logo
Download file in Android

Download file in Android

Quello che vediamo oggi è come scaricare file in Android dalla rete.

Prima di tutto i permessi da mettere nell'AnrdoidManifest:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Come vedete due sono quelli che ci servono come minimo: quello legato a internet per la connessione, e quello per salvare i file sul dispositivo.

Nella nostra Activity:

public class MainActivity extends Activity {
    
    private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new DownloadDatas().execute("");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    public class DownloadDatas extends AsyncTask  {

        @Override
        protected Object doInBackground(Object... params) {
            try {
                DownloadFile.downlad(path + "file.sqlite");
            } catch (IOException e) {
            }
            return null;
        }
      
    }

}

Come prima cosa, notiamo che qui impostiamo il path che punta alla directory interna al dispositivo, dove salvare i file.

Mattepuffo's logo
Usare gli AlertDialog in Android

Usare gli AlertDialog in Android

Gli AlertDialog sono dei componenti molto utili per inviare dei messaggi all'utente, anche perchè obbligano l'utente a vedere che c'è un avviso.

Solo che ad essere sincero li trovo più comlicati rispetto ai "cugini" di iOS.

Comunque vediamo di creare una classe che possa rappresentare un AlertDialog generico e che possa essere richiamato ovunque, anche in azioni asincrone.

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;

public class GenericDialog {
    
    public static void createDialog(String message, Context context) {
        final AlertDialog alert = new AlertDialog.Builder(context).create();
        alert.setTitle("ERROR");
        alert.setMessage(message);
        alert.setButton(-3, "OK", new DialogInterface.OnClickListener() {
            
            public void onClick(DialogInterface dialog, int which) {
                alert.cancel();
            }
        });
        alert.show();
    }
}

C'è un solo metodo statico che richiede due parametri: il messaggio e il contesto in cui deve essere richiamato.

Questo secondo parametro è essenziale se si vuole richiamarlo in contesti asincroni.