[C++, Python] C++ e GUI

powamaker
Ciao a tutti,

scrivo principalmente codice in C++ e mi piacerebbe cominciare ad integrarlo ad una GUI. Tempo fa avevo utilizzato OpenGL e non mi era piaciuto granché.
Ultimamente mi sono state consigliate queste: FLTK, GTK, Qt, Qwt, wxWidgets, VTK. Voi cosa ne pensate? Qual è la migliore? Sono tutte gratuite? (Sono dubbioso su Qt).
Per avere risultati migliori mi consigliereste di scrivere una GUI con un altro linguaggio? E, se si, quale e come lo integrereste?

Grazie a tutti per l'attenzione :) !


EDIT: sono estremamente incuriosito anche da Python quindi se i consigli lo includessero (per esempio creare la GUI in Python -anche se so che non è estremamente adatto - per iniziare ad approcciarmi al suo mondo) ve ne sarei ancor più riconoscente :wink:

Risposte
Raptorista1
Io ho utilizzato Qt in passato, che è gratuita per utilizzi non commerciali e senza alcune estensioni esotiche. A me è piaciuta molto, ha anche un sacco di cose oltre alla sola grafica [Database SQL, Network, ...] e c'è sia per C++ sia per Python, quindi se poi vuoi cambiare linguaggio non devi imparare un'altra libreria.

powamaker
Ti ringrazio molto :) !!!

Raptorista1
I libri di Summerfield su Qt sono molto buoni, anche se per la versione precedente [Qt4]. Cerca qualche buon libro di Qt5, sicuramente ce ne sono.

powamaker
Va bene, allora guardo :) ! E grazie per i consigli!!

apatriarca
Ho usato alcuni degli strumenti da te elencati. Sono tutti gratuiti, a patto di seguire le limitazioni richieste dalle licenze. Qt richiede in particolare che la tua applicazione non includa le librerie all'interno dell'eseguibile del tuo codice ma che carichi invece tali librerie dinamicamente. In pratica non è un problema. E' comunque fatto tutto in modo automatico. Credo che wxWidget possa avere limitazioni simili (non ho letto la licenza con attenzione ma dice che è essenziamente LGPL che è quella che usa anche Qt).

Le librerie che hai elencato sono molto diverse come obiettivi e funzionalità. Infatti:
- OpenGL: Si tratta di una libreria di basso livello per la creazione di scene tridimensionali (e non solo). Deve necessariamente appoggiarsi ad una libreria che ha il compito di creare la finestra e altro. Non è insomma pensata per creare GUI anche se è possibile farlo con molti sforzi.
- FLTK: Questo è effettivamente un framework per creare GUI. L'ho usato poco e non mi è piaciuto più di tanto, ma la tua esperienza potrebbe essere diversa.
- GTK: Nato in C ma ad oggetti, per cui fa uso di una particolare implementazione di questi concetti nel linguaggio C. Dovrebbe esserci un binding per il C++, ma non l'ho mai usato. Usata in C, fa il suo dovere.
- Qt: E' quella che ho usato di più e una volta che hai imparato i concetti principali è abbastanza facile e veloce da usare. Fa un po' di tutto per cui forse a volte può apparire un po' "pesante". La versione 5 supporta il C++11 ed è quindi in generale più bella da usare.
- Qwt: è una libreria basata su Qt per aggiungere alcune funzionalità. Nessuna di queste funzionalità riguarda le GUI di base.
- wxWidgets: Non l'ho mai usata anche se è (era?) abbastanza popolare.
- VTK: E' una libreria per la visualizzazione scientifica. Non ha nulla a che fare con le GUI. Supporta l'inclusione in una GUI Qt.

Credo che python abbia binding per ognuna di queste librerie. Molti software che fanno uso di Qt permettono la creazione di finestre di dialogo e altre funzionalità in Python. Non è tuttavia qualcosa di automatico o semplice da fare dal punto di vista dell'applicazione in C++.

powamaker
Ciao, grazie per la risposta dettagliata :) !!!
Il fatto che Qt debba caricare le librerie dinamicamente implica (e scusami la domanda da ignorante) che sui dispositivi su cui andrà a girare l'applicazione sia presente il framework, giusto?
Puoi per favore rispiegarmi ciò che hai detto alla fine riguardo Python e C++?
Grazie mille :) !!!

Luc@s
python

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PyQt4 tutorial 

In this example, we create a simple
window in PyQt4.

author: Jan Bodnar
website: zetcode.com 
last edited: October 2011
"""

import sys
from PyQt4 import QtGui


def main():
    
    app = QtGui.QApplication(sys.argv)

    w = QtGui.QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()
    
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()


C++
#include <QApplication>
#include <QPushButton>
 
int main(int argc, char **argv)
{
 QApplication app (argc, argv);
 
 QPushButton button ("Hello world !");
 button.show();
 
 return app.exec();
}

Raptorista1
@Luc@s: di grazia, questo lapidario copia-incolla di codice che cosa dovrebbe significare?

Luc@s
La differenza tra python e C++.
Io in base a quello andrei di C++ :)

Raptorista1
"Luc@s":
Io in base a quello andrei di C++ :)

Per lo meno siamo d'accordo sulla conclusione :)
Consiglio anche a powamaker di provare prima in C++, se è un linguaggio che conosce già, per non sovrapporre le difficoltà dell'imparare un nuovo linguaggio ed una nuova tecnica di programmazione allo stesso tempo.

Luc@s
cmq il C++11 e' molto diverso da quando ho cominciato io (2000) ... sembra quasi un linguaggio nuovo

apatriarca
Esistono parecchi programmi che permettono di aggiungere funzionalità a quelle esistenti usando un qualche linguaggio di scripting. Queste applicazioni sono spesso scritte in C++, ma permettono agli utenti di utilizzare linguaggi come Python per aggiungere le funzionalità che gli servono senza dover aspettare che il programma decida di aggiungerle. In effetti, queste funzionalità sono spesso legate alle particolare necessità dell'utente e sarebbero inutili ad altri.

Quando queste applicazioni sono scritte usando Qt per creare le GUI, l'utente può creare finestre di dialogo o altro usando questa libreria. Suppongo questo discorso valga anche per altri framework per creare GUI, ma ho principalmente esperienza con Python+Qt4.

P.S. Prima di Qt5, il binding per python aveva il vantaggio di permettere di connettere lambda o funzioni generiche ai segnali generati dai vari widget. Con Qt5 questo vantaggio si è un po' perso, ma è comunque più facile creare una applicazione con python che con il C++. Usando il C++ è infatti necessario configurare correttamente il proprio IDE o creare il corretto makefile (sia esso creato usando Make, CMake, QMake..). In Python è sufficiente installare i pacchetti ed è tutto più o meno automatico.

powamaker
Raptorista, Luc@s e Apatriarca mi stata dando degli ottimi consigli e grazie a tutti per l'aiuto!!! :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.