Decidere che strumenti usare e QtCreator

di il
10 risposte

Decidere che strumenti usare e QtCreator

Ciao a tutti, sono novello e mi sono appena presentato nell'apposita sezione...così comincio subito a tediarvi con le mie domande da inesperto della programmazione.

Conosco un po' di linguaggi per studio personale o università (PHP, Javascritp, C++, Matlab...) e ho la fortuna di essere abbastanza propenso a capire le sintassi.
Ora vorrei partire con un progetto più ambizioso: creare un'applicativo molto semplice CrossPlatform.
Ho letto che in genere si usa C++ e le librerie Qt per le interfacce grafiche, quindi ci si deve avvalere di un compilatore, però vorrei chiedere a voi che strumenti è meglio usare.

Io uso un Mac con sistema operativo Mavericks.

Poi vorrei capire: se io usassi Xcode il sorgente che io scrivo che requisiti deve avere per poterlo poi compilare con un altro compilatore che mi produca un *.exe per Win?
Il mio dubbio è questo: non è che Xcode usi delle librerie che poi sa leggere solo lui anche se io lavoro in C? Inoltre riesco a creare GUI con Xcode o devo avvalermi di Qt e nel secondo caso in che modo (con QtDesigner o posso 'disegnare' tramite codice)?

Spiego il perché di questa domanda: ieri ho scaricato QtCreator, ma trovo un problema che al momento mi è insormontabile in quanto anche quelle spiegazioni che trovo in internet non funzionano.
In pratica quando a usare il comando qmake -project da errore, ho allora seguito l'indicazione trovata su internet di scrivere nel bash un path. Questo path porta al qmake del compilatore (gcc) giusto?
Solo che la cartella gcc/bin dentro a usr io non ce l'ho!!! Dentro a usr ho solo degli eseguibili gcc o g++...
Qualcuno che sappia risolvere questo problema?

Riassumo quindi un po' cosa mi serve capire: che programmi posso usare affinché il porting sia semplice. Eventualmente capire cosa non va di QtCreator oppure capire se è fattibile quello che devo fare con Xcode.

10 Risposte

  • Re: Decidere che strumenti usare e QtCreator

    Riassumo quindi un po' cosa mi serve capire: che programmi posso usare affinché il porting sia semplice. Eventualmente capire cosa non va di QtCreator oppure capire se è fattibile quello che devo fare con Xcode.
    Per essere cross-platform non hai bisogno di librerie o tools particolari ma solo una buona dose di ordine: se definisci una tua "interfaccia" interna e usi questa "interfaccia" anzichè direttamente la libreria grafica per passare poi ad un nuovo sistema ti basterà implementare le funzioni (o le classi) di tale interfaccia. Quindi puoi magicamente utilizzare Qt sotto Linux e invece utilizzare API win32 sotto Windows.
    Ad ogni modo: non hai considerato la possibilità di utilizzare Java?
  • Re: Decidere che strumenti usare e QtCreator

    Non e' cosi' semplice, anzi, tutt'altro!

    Il problema principale e' la filosofia su cui le varie piattaforme sono basate, ed in particolare la parte di interfaccia grafica. Ma non solo: filesystem, ...

    Filosofie diverse richiedono implementazioni diverse, ed uniformare le filosofie e' un lavoro molto arduo anche per programmatori esperti.

    Quello che si deve fare, come hai detto, e' quello di creare uno strato astratto tra l'applicazione e la piattaforma (S.O.) per cui si sta' sviluppando. Ma per fare un lavoro minimamente ragionevole, e' necessario sviluppare fin da subito su piu' piattaforme contemporaneamente. Altrimenti ci si trova nella situazione che scelte fatte su una piattaforma, anche se rese astratte sono incompatibili con quelle di un'altra piattaforma.

    No, un approccio piu' ragionevole, per chi e' alle prime armi (e gia' cosi' e' complicato) e' quello di avere una stessa piattaforma di sviluppo su tutti i S.O.

    1) stesso compilatore
    2) stesse librerie

    Quind ad esempio, usando:

    1) il compilatore GNU GCC (implementazione Cygwin per Windows, NON la versione mingw)
    2) la libreria QT per l'interfaccia grafica (che e' multipiattaforma gia' di suo)
    3) GNU Autotools (per risolvere in modo automatico tutta una serie di rognette quali, quale libreria importare per le funzioni matematiche, quale comando usare per la creazioe di directory, ...)

    si e' gia' sulla buona strada per poter realizzare applicazioni che girano senza quasi modifiche su Windows, Mac OSX e Linux.

    Ed anche cosi', non si eliminano situazioni strane in cui e' necessario sapere su che piattaforma dsi sta' sviluppando.


    Sempre che il programma da realizzare non sia il classico "Hello World"
  • Re: Decidere che strumenti usare e QtCreator

    Altra considerazione: Xcode.
    Xcode si porta dietro una versione del compilatore GNU GCC che non e' standard, con librerie non standard, oltre ad essere parecchio vecchio.

    Devi installarti MacPort, installarti il compilatore GCC 4.8 ed usare un ambiente di sviluppo multipiattaforma, perche' Xcode non vede il nuovo compilatore (o almeno io non ci sono riuscito per qualche strano malfunzionamento ...).
  • Re: Decidere che strumenti usare e QtCreator

    Non e' cosi' semplice, anzi, tutt'altro!
    Non ho mai detto che fosse semplice .
    Il problema principale e' la filosofia su cui le varie piattaforme sono basate, ed in particolare la parte di interfaccia grafica. Ma non solo: filesystem, ...
    Esatto: non è solo un problema di interfaccia grafica! Scrivere un programma che sia multi-piattaforma non è una cosa banale.
    Io credo che data la poca esperienza di mastraa (in questo tipo di progetto) possa essere conveniente cominciare a scrivere in un ambiente specifico e a conclusione dello sviluppo fare il porting sugli altri ambienti, anche mantenendo pochi files sorgente in comune fra i vari ambienti.
    Il lavoro di porting sarà molto istruttivo (specie se nel nuovo ambiente si utilizzerà una libreria grafica diversa) e sicuramente porterà ad una rivisitazione dell'organizzazione del codice.
  • Re: Decidere che strumenti usare e QtCreator

    Bravo: Java e' una buona idea.

    Ottimo linguaggio, ottime librerie (se si usano le Swing oppure le SWT)

  • Re: Decidere che strumenti usare e QtCreator

    Innanzitutto voglio ringraziare tutti per le ottime dritte, le ho analizzate tutte ieri mentre ero in giro per studio, una notte per pensarci e ora sono qui a rispondere e porre altre domande, magari specificando meglio gli obiettivi attuali ed eventualmente futuri.

    Premetto che non ho nessun veto a nessun tipo di linguaggio, quindi usare Java piuttosto che Python o C non mi fa differenza (C lo uso già un po', ma non mi cambia).
    Quello di cui ho bisogno è poter dare in mano ad una persona un file per la cui esecuzione non serva scaricarsi altro per farlo girare. Insomma devo darlo a uno che 'non sa nulla' di computer e deve poterlo usare (So che ci sono degli eseguibili tipo in Python che puoi fornire con un interprete incorporato?).
    In pratica non voglio fare qualcosa come un codice matlab (che uso per analizzare io i dati, ma uno che non sa usarlo è un casino) che per interpretarlo bisogna scaricare Matlab che costa, pesa e non è così intuitivo.
    A questo punto domanda: scrivendo in Java basta che una persona abbia installato Java (interprete?) nel suo computer e tutto funziona? Non è che Mac che mi pare avere un po' di avversione per Mac fra due anni non mi legge più nulla?
    Dopodichè non ho alcun problema a puntare su qualcosa di molto arduo, mi ci vorrà più tempo, ma siccome mi appassiona e per fortuna riesco a immedesimarmi abbastanza nel ragionamento di un computer vedo che apprendo con una certa facilità. Inoltre vorrei che in futuro questo possa essere parte del mio lavoro (magari poi non sarò io direttamente a programmare ma una persona che lo ha studiato, ma sapere come si fanno le cose è sempre bene)

    Quali sono quindi le cause di incompatibilità tra due SO? Cioè io pensavo che nel momento in cui io scrivo un programma in C++ questo sia un codice 'universale' e che si arrangiasse poi il compilatore a tradurre in modo corretto. (Chiaro poi magari la porta USB si chiama pinco piuttosto che palla ma che a livello di sintassi le cose non cambino) Non è così?

    Infine un rapido sunto di quello che mi serve:
    Leggere dei file *.txt e spezzare stringhe NMEA
    Produrre grafici parzialmente interattivi (scelta dei dati, colori, più grafici sulla stesso piano cartesiano...)
    Passo successivo poter leggere i dati direttamente da porta USB (questo una volta l'ho già fatto con un Processing ed è una lettura seriale no?) e più avanti anche via Wifi
  • Re: Decidere che strumenti usare e QtCreator

    Non dirmi che vuoi leggere dati da un gps!

    Per java e python, devi avere preinstallato la virtual machine.

    Java e' attualmente la piattaforma piu' ricca.

    Python e' ancora in evoluzione. Attualmente esiste la versione 2 e 3 praticamente incompatibili tra di loro.

    C++ e' altamente platform dependent.

    Il tuo programmino scritto oggi non e' detto che fra 5 anni continui a funzionare: la tecnologia corre...

    Nessun linguaggio e' totalmente indipendente dall'hardware sottostante: i piu' indipendenti sono quelli basati su virtual machine, per ovvi motivi.
    Linguaggi come il C ed il C++ sono altamente dipendenti, invece.
    Per non parlare del sistema operativo e dell'interfaccia grafica ...
  • Re: Decidere che strumenti usare e QtCreator

    Non esattamente da un GPS, cioè si tratta di un apparecchio che ho costruito io e invia dati in NMEA, tra cui alcuni recuperati da un gps.

    Ad ogni modo ora credo di avere le idee un pelo più chiare però chiedo conferma:

    Usando C++ se io creassi un file usando solo librerie standard e comunque compatibili a tutti i SO, poi posso compilare con il compilatore apposito per Mac o Win e ottenere l'ex o dmv o quello che è giusto?
    Come faccio a sapere se quello che uso (le librerie) è 'standard'? Dopotutto devo fare una cosa abbastanza semplice per ora.
    Io compilerei in un qualsiasi IDE (anche Xcode) stando attento a usare solo roba compatibile e poi ogni compilatore dovrebbe essere in grado di darmi un output per tutti i SO...giusto?

    Usando Java (e Python mi pare sia simile) posso produrre un eseguibile del tutto simile a un exe che necessita di questa virtual machine. La virtual machine devo 'fornirla' io oppure in genere i computer ne sono provvisti?

    EDIT: domanda più diretta. Se io volessi che oggi un programma fosse utilizzabile da quasi tutti, usando Java è possibile? Cioè ci sono SO che non lo supportano? Nel 'mondo' Java c'è più o meno in tutti i computer no?
  • Re: Decidere che strumenti usare e QtCreator

    Allora, per tagliare la testa al toro:

    realizzare applicazioni multipiattaforma non e' per nulla banale: ci sono un sacco di cosa da sapere Non basta: usare solo librerie standard . Ci sono un'infinita' di dettagli e di regole da seguire.

    Troppo complicato per chi e' alle prime armi e dalle domande che fai e da quello che hai detto sei multo meno che alle prime armi.

    C++ e' un linguaggio complesso: in confronto a Python e Java, richiede molto piu' tempo per impararlo. QT e' una gran libreria, ma anch'essa molto complessa.

    Python e' un linguaggio non tipato: le variabili non hanno tipo. Non e' un buon linguaggio per imparare a programmare.

    Unica soluzione: Java!

    Le VM vanno scaricate ed installate appositamente.

    Ti conviene iniziare con un primo programmino e capirai di cosa sto' parlando.
  • Re: Decidere che strumenti usare e QtCreator

    migliorabile ha scritto:


    Allora, per tagliare la testa al toro:

    realizzare applicazioni multipiattaforma non e' per nulla banale: ci sono un sacco di cosa da sapere Non basta: usare solo librerie standard . Ci sono un'infinita' di dettagli e di regole da seguire.

    Troppo complicato per chi e' alle prime armi e dalle domande che fai e da quello che hai detto sei multo meno che alle prime armi.

    C++ e' un linguaggio complesso: in confronto a Python e Java, richiede molto piu' tempo per impararlo. QT e' una gran libreria, ma anch'essa molto complessa.

    Python e' un linguaggio non tipato: le variabili non hanno tipo. Non e' un buon linguaggio per imparare a programmare.

    Unica soluzione: Java!

    Le VM vanno scaricate ed installate appositamente.

    Ti conviene iniziare con un primo programmino e capirai di cosa sto' parlando.
    Non ho idea di come si programmino software completi, ma l'apparecchio che acquisisce dati da una decina di sensori, li filtra e li salva è scritto in C++ quindi non saprò ovviamente bene, ma di C++ qualcosa capisco. Il mio problema è capire cosa devo fare per evitare di riscrivere 2-3 volte il codice a seconda della macchina che vado a usare...
    Pytohn e Java proprio non li ho mai usati quindi conosco per sentito dire invece e sono meno che alle prime armi.

    Comunque grazie di tutti i consigli, ora valuterò il da farsi e spero di avere fortuna nel fare le scelte giuste
Devi accedere o registrarti per scrivere nel forum
10 risposte