Autore Topic: Capire come funziona QT Toolkit  (Letto 1661 volte)

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Capire come funziona QT Toolkit
« il: 11 Dicembre 2011, 18:30:27 »
Ciao a tutti.
Ho preso da Wikipedia questo  esempio scritto con il toolkit QT:

#include <QtGui>
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel label("Hello, world!");
    label.show();
    return app.exec();
}

Premetto che non ho scaricato ne mai provato QT.
Volevo solo capire come funzionava (per cercare alla fine di capire com'è implementata la libreria).
Se interpreto bene, l'esempio che ho trovato non fa altro che:
1) Creare un oggetto QApplication passandogli i parametri del main
2) Creare un oggetto label
3) Mostrare la label
4) ritornare un codice, ricavato dal metodo exec() di app. (metodo che, considerato il nome, non farà altro che "avviare" l'applicazione QT)

Ecco, se ho capito bene, l'oggetto app rappresenta la mia applicazione QT (Visivamente sarà una finestra?).
Ma quello che non capisco è come fa a "legare" la label all'applicazione...come fa a dire che la label appartiene a quella particolare applicazione?

Io avrei implementato la cosa in questo modo:

QApplication app();
QLabel myLabel = QTcreateLabel("Hello World"); //QTCreateLabel non esiste molto probabilmente, me la sono inventata io
app.add(myLabel); //qui è chiaro che myLabel deve essere aggiunta alla mia applicazione. Insomma, come in Java AWT/Swing

Perchè invece il codice di QT deve essere scritto in quel modo? Com'è implementato? (ho un vago sospetto; c'entra in pattern Singleton?)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Capire come funziona QT Toolkit
« Risposta #1 il: 11 Dicembre 2011, 18:36:06 »
QApplication non è proprio la finestra, ma è la stessa QLabel che viene promossa a "finestra" al momento di eseguire app.exec().
Tale promozione avviene in automatico perchè non c'è nessuna root impostata nella label, e nessun'altra form registrata, quindi la label stessa diventa una root, per cui viene creata in automatico una finestra per contenerla.

Il pattern Singleton in questo caso viene applicato nell'oggetto QApplication come contenitore per gestire molte cose, tra cui anche le finestre (che possono essere molte).
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Capire come funziona QT Toolkit
« Risposta #2 il: 11 Dicembre 2011, 18:45:39 »
Citazione da: "TheKaneB"
QApplication non è proprio la finestra, ma è la stessa QLabel che viene promossa a "finestra" al momento di eseguire app.exec().
Tale promozione avviene in automatico perchè non c'è nessuna root impostata nella label, e nessun'altra form registrata, quindi la label stessa diventa una root, per cui viene creata in automatico una finestra per contenerla.

Il pattern Singleton in questo caso viene applicato nell'oggetto QApplication come contenitore per gestire molte cose, tra cui anche le finestre (che possono essere molte).

Quindi è app.exec() che "promuove" la QLabel a "finestra" (o cmq crea un contenitore per contenere la QLabel)?

Se è così..non capisco come faccia app ad "accorgersi" che esiste una QLabel. Le due cose mi sembrano sconnesse tra loro...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Capire come funziona QT Toolkit
« Risposta #3 il: 11 Dicembre 2011, 19:52:33 »
Non vorrei dire una cavolata, ma credo che il tipo QWidget, da cui deriva QLabel, vada a registrarsi, nel suo costruttore, presso un oggetto singleton di Qt, il quale, a sua volta, provvede a promuoverlo a finestra.

Per info dettagliate, comunque, fai riferimento alla documentazione ufficiale :-)
Normalmente non è necessario conoscere questi dettagli per l'utilizzo di Qt, quindi non mi sono mai preoccupato di andarmi a studiare i suoi meccanismi interni.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Capire come funziona QT Toolkit
« Risposta #4 il: 11 Dicembre 2011, 21:29:22 »
Citazione da: "TheKaneB"
Non vorrei dire una cavolata, ma credo che il tipo QWidget, da cui deriva QLabel, vada a registrarsi, nel suo costruttore, presso un oggetto singleton di Qt, il quale, a sua volta, provvede a promuoverlo a finestra.

Certo, potrebbe essere, non avevo pensato a questa possibilità!

Citazione
Per info dettagliate, comunque, fai riferimento alla documentazione ufficiale :-)
Normalmente non è necessario conoscere questi dettagli per l'utilizzo di Qt, quindi non mi sono mai preoccupato di andarmi a studiare i suoi meccanismi interni.

Si scusa...non è mia intenzione usare QT (non per ora almeno...) ma cercare di capire il perchè di quello "strano" (per me) modo di usarlo.
Il motivo di fondo è capire i vantaggi di un approccio di questo tipo rispetto ad uno tipo  JAVA (AWT/Swing). Se è stato realizzato in questa maniera, un qualche buon motivo ci deve essere, almeno  credo....
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Capire come funziona QT Toolkit
« Risposta #5 il: 11 Dicembre 2011, 23:56:07 »
la potenza di Qt sta in molte sue qualità:

- Buon design, pulito e ben strutturato
- Multipiattaforma (comprese varie piattaforme mobile)
- Efficiente (sfrutta, ove possibile, le funzioni native dell'OS con relative accelerazioni hardware)
- Comodo da programmare (il meccanismo signal/slot e la struttura multithreaded delle applicazioni Qt rendono i progetti facilmente ampliabili)
- framework abbastanza ampio (grafica raster e vettoriale, animation framework applicabile anche a properties non grafiche, supporto nativo al networking, al threading, ecc...)

le librerie Swing sono solamente una libreria grafica, mentre Qt è un intero framework di programmazione. Questo perchè Swing si appoggia alla vastissima libreria standard Java, mentre Qt si basa su C++ e in parte rimpiazza alcune parti della STL con varianti custom (presenta comunque delle funzioni di conversione tra oggetti Qt e oggetti STL, ad esempio QString, QVector, ecc...).
Le filosofie di programmazione sono parecchio diverse e diciamo che Qt cerca di rendere il C++ più comodo da programmare, mentre Java è già abbastanza comodo e ben strutturato di per se.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: Capire come funziona QT Toolkit
« Risposta #6 il: 12 Dicembre 2011, 19:40:02 »
Purtroppo non è esente da difetti.

Poi c'è da dire che è enorme. Si mangia tranquillamente più di 1GB di spazio su hd per la versione base, e senza nemmeno l'SDK installato. Installare 1,1GB di roba solo perché un programma usa le Qt mi sembra troppo esagerato.

Tags: