View Full Version : Qt3 o Gtk?
secondo voi su linux quali sono meglio, per programmare un'interfaccia?
la + facile??
xybercom
27-01-2004, 20:46
imho:
Premessa: secondo me le librerie C++ sono più facili da usare di quelle C e permettono di scrivere programmi più compatti.
La libreria più facile secondo me è Fltk anche se è un po' minimale.
wxWindows è molto estesa e mi sembra anche facile.
Tra le Qt e le gtk c'è il fatto che le Qt non sono completamente free ma sono librerie C++ native mentre le gtk sono in C (anche se ci sono i bindings C++ che però personalmente non mi entusiasmano).
ilsensine
27-01-2004, 21:13
fox (http://www.fox-toolkit.org) . Mai visto niente di più semplice.
xybercom
27-01-2004, 21:40
Originariamente inviato da ilsensine
fox (http://www.fox-toolkit.org) . Mai visto niente di più semplice.
Non l'ho mai provata però se ha una base di utenti piccola (esempi di programmi scritti con fox ?) non so quanto valga la pena di investirci tempo [senza polemica]
Originariamente inviato da ilsensine
fox (http://www.fox-toolkit.org) . Mai visto niente di più semplice.
azz! non lo conoscevo!!!
mi guarderò un pò di documentazione.
per ora cmq tra gtk e qt voto qt, le trovo molto più semplici
ciao
ilsensine
28-01-2004, 07:54
Originariamente inviato da xybercom
Non l'ho mai provata però se ha una base di utenti piccola (esempi di programmi scritti con fox ?) non so quanto valga la pena di investirci tempo [senza polemica]
Ha una base di utenti piccola ma molto attiva. E poi sono state portate su tantissime piattaforme.
esempi di programmi scritti con fox ?
Diversi esempi sono nei sorgenti. Sono state scritte anche app commerciali per grafica opengl (l'autore delle fox si occupa proprio di queste cose).
Un programmino per pda (ma anche per pc) che ho scritto io lo trovi sul mio www (non oso chiamarla home page :D )
a parte il fatto che non mi si compila :( , ma questo lo risolvo....
dove posso trovare della documentazione?
su google non ho trovato nulla.
mi spiego meglio: non voglio la documentazione del sito, quella mi sarà utile, ma più tardi.
vorrei un tutorial stupidissimo che mi faccia vedere le basi, poi mi studio la documentazione.
almeno io ho sempre fatto così...
qualcuno ha un sito che spieghi qualcosa?
ciao
ilsensine
28-01-2004, 19:40
Se stai parlando delle fox, c'è una introduzione che illustra il principio:
http://www.fox-toolkit.org/introduction.html
Oltre questa, ho trovato molto utili i numerosi esempi inclusi nei sorgenti. La documentazione generale delle classi è un ottimo riferimento quando sai già che oggetti ti servono.
Originariamente inviato da ilsensine
Se stai parlando delle fox, c'è una introduzione che illustra il principio:
http://www.fox-toolkit.org/introduction.html
Oltre questa, ho trovato molto utili i numerosi esempi inclusi nei sorgenti. La documentazione generale delle classi è un ottimo riferimento quando sai già che oggetti ti servono.
ehm...
si, intendevo proprio questo!
del resto ho letto introduzione e da geniaccio quale sono ho pensato fossero tutte cose inutili:muro: :muro: :muro: :muro: :D o magari la vita del programatore che la ha fatta.
mi sà che è megli se ci bevo sopra:gluglu: :D
grazie, ciao
è difficile utilizzare glade e programmare le interf.?
ilsensine
28-01-2004, 20:16
Nel frattempo sposto in Programmazione, che qui siamo un pò OT...
dopo qualche schiaffone con la compilazione sono riuscito a installarlo.
il readme non parla di nient'altro dopo make install, ma adesso se provo a compilare un file che richieda fx.h mi dice che non trova il file....
che mi sono fumato?
ciao
ilsensine
30-01-2004, 14:08
Se il file include "fx.h", devi indicare il percorso degli header delle fox a gcc con -I <percorso>. Altrimenti, se il file include <fox/fx.h> oppure <fox-1.1/fx.h> (a seconda della versione fox che usi), non dovrebbe essere necessario.
torno a rompere le scatole.
se copio pari pari il codice dell'introduzione mi dà una decina di errori :eek:
con questo
#include <fox/fx.h>
class FinestraPrincipale : public FXMainWindow {
FXDECLARE(FinestraPrincipale)
private:
FXVerticalFrame *Frame;
protected:
FinestraPrincipale(){}
public:
FinestraPrincipale(FXApp* a);
virtual void create();
}
FXIMPLEMENT(FinestraPrincipale,FXMainWindow,NULL,0)
FinestraPrincipale::FinestraPrincipale(FXApp *a):FXMainWindow(a,"FinestraPrincipale",NULL,NULL,DECOR_ALL,0,0,400,300){
Frame=new FXVerticalFrame(this,FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT);
new FXButton(Frame,"&CHIUDI",NULL,getApp(),FXApp::ID_QUIT,FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,0,0,0,0,10,5,5);
}
void FinestraPrincipale::create(){
FXMainWindow::create();
show();
}
int main(int argc,char *argv[]){
FXApp* application=new FXApp("Scribble","test");
application->init(argc,argv);
new FinestraPrincipale(application);
application->create();
application->run();
return 0;
}
invece mi dà:
g++ fox.cpp
fox.cpp:15: error: ISO C++ forbids defining types within return type
fox.cpp:15: error: syntax error before `*' token
:wtf:
funzionasse almeno l'esempio potrei cercare dove ho sbagliato, ma così alla cieca non sò proprio cosa fare.... :(
ciao
xybercom
31-01-2004, 21:27
da una scorsa veloce direi che ci sono almeno 3 ';' che mancano alle linee 9, 13 e 15
#include <fox/fx.h>
class FinestraPrincipale : public FXMainWindow {
FXDECLARE(FinestraPrincipale)
private:
FXVerticalFrame *Frame;
protected:
FinestraPrincipale(){};
public:
FinestraPrincipale(FXApp* a);
virtual void create();
};
FXIMPLEMENT(FinestraPrincipale,FXMainWindow,NULL,0);
FinestraPrincipale::FinestraPrincipale(FXApp *a):FXMainWindow(a,"FinestraPrincipale",NULL,NULL,DECOR_ALL,0,0,400,300){
Frame=new FXVerticalFrame(this,FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT);
new FXButton(Frame,"&CHIUDI",NULL,getApp(),FXApp::ID_QUIT,FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,0,0,0,0,10,5,5);
}
void FinestraPrincipale::create(){
FXMainWindow::create();
show();
}
int main(int argc,char *argv[]){
FXApp* application=new FXApp("Scribble","test");
application->init(argc,argv);
new FinestraPrincipale(application);
application->create();
application->run();
return 0;
}
xybercom
31-01-2004, 21:46
Originariamente inviato da ilsensine
Ha una base di utenti piccola ma molto attiva. E poi sono state portate su tantissime piattaforme.
Hai ragione, ho visto (apt-cache search fox) che ci sono anche i pacchetti .deb per Debian, quindi sono per forza librerie valide :)
FXIMPLEMENT è una macro.
per il resto hai ragione, mancavano il ; sulla 9. non lo ho messo perchè sul tuttorial non lo metteva :eek:
sulla classe me ne ero accorto dopo aver postato.
ora però la situazione è peggiorata.. :(
/tmp/ccXEKCJd.o(.text+0x78): In function `FinestraPrincipale::handle(FXObject*, unsigned, void*)':
: undefined reference to `FXMetaClass::search(unsigned) const'
/tmp/ccXEKCJd.o(.text+0xe7): In function `FinestraPrincipale::handle(FXObject*, unsigned, void*)':
: undefined reference to `FXMainWindow::handle(FXObject*, unsigned, void*)'
/tmp/ccXEKCJd.o(.text+0x12d): In function `FinestraPrincipale::FinestraPrincipale[not-in-charge](FXApp*)':
: undefined reference to `FXString::FXString[in-charge](char const*)'
/tmp/ccXEKCJd.o(.text+0x13f): In function `FinestraPrincipale::FinestraPrincipale[not-in-charge](FXApp*)':
: undefined reference to `FXMainWindow::FXMainWindow[not-in-charge](FXApp*, FXString const&, FXIcon*, FXIcon*, unsigned, int, int, int, int, int, int, int, int, int, int)'
...
function `FXShell::FXShell[not-in-charge]()':
: undefined reference to `vtable for FXShell'
/tmp/ccXEKCJd.o(.gnu.linkonce.t._ZN11FXCompositeC2Ev+0xd): In function `FXComposite::FXComposite[not-in-charge]()':
: undefined reference to `FXWindow::FXWindow[not-in-charge]()'
/tmp/ccXEKCJd.o(.gnu.linkonce.t._ZN11FXCompositeC2Ev+0x19): In function `FXComposite::FXComposite[not-in-charge]()':
: undefined reference to `vtable for FXComposite'
collect2: ld returned 1 exit status
vi ho saltato le centinaia di pagine che mette in mezzo, che intanto sono la stessa cosa :(
cia
ilsensine
01-02-2004, 11:07
Originariamente inviato da NA01
undefined reference to xxx
Speri che gcc capisca di quali liberire ha bisogno il programma leggendoti nel pensiero? ;)
(v. opzione -l in gcc, devi linkare con -lFOX o -lFOX-1.1. Questo è vero per fox, Qt, gtk, o qualsiasi programma che usi librerie esterne)
Originariamente inviato da ilsensine
Speri che gcc capisca di quali liberire ha bisogno il programma leggendoti nel pensiero? ;)
(v. opzione -l in gcc, devi linkare con -lFOX o -lFOX-1.1. Questo è vero per fox, Qt, gtk, o qualsiasi programma che usi librerie esterne)
:D
con le qt usavo qmake, faceva tutto da solo :D :mc:
grazie, ciao
ste librerie sono mitiche!!!
sono finalmente riuscito a scrivere qualcosa con un'interfaccia nello stesso tempo che utilizzavo quando usavo visual c++ :sofico:
ho quasi finito un programmino di test per vedere quanto sono abile :D
ora però mi sorge un problema...
il testo nelle caselle lo posso prendere con getText() che mi restituisce un FXString.
il punto è che a me serve una stringa standard (quelle di #include <string.h> per intenderci).
ho guardato qua nella speranza che fosse stata creata una funzione i conversione:
http://www.fox-toolkit.org/ref/classFX_1_1FXString.html
ma non ho trovato nulla che mi restituisca una stinga normale o al limite un array di caratteri :cry:
forse questo:
FXString& FX::FXString::operator= ( const FXchar * s )
Assign a C-style string to this.
ma sinceramente non ho capitoc cosa sia :(
ciao
Icedguardian
02-02-2004, 19:50
Per il momento voto le Qt, semplicissime da usare.
Ma le fox hanno qualcosa del tipo QtDesigner?? Sto sfogliando il sito ma non ho ancora trovato niente.
Ciao
ilsensine
02-02-2004, 20:38
Originariamente inviato da NA01
ste librerie sono mitiche!!!
<ot> Sei tu quel tal J0k3r che si è messo a inzozzare la ml? :D
il testo nelle caselle lo posso prendere con getText() che mi restituisce un FXString.
il punto è che a me serve una stringa standard (quelle di #include <string.h> per intenderci).
FXString::text() restituisce un normale const FXchar *
ilsensine
02-02-2004, 20:39
Originariamente inviato da Icedguardian
Ma le fox hanno qualcosa del tipo QtDesigner?? Sto sfogliando il sito ma non ho ancora trovato niente.
C'è un certo DialogEditor, ma non è aggiornato di frequente.
In realtà con le fox non serve un editor di finestre, sono state pensate per farne a meno.
Originariamente inviato da ilsensine
<ot> Sei tu quel tal J0k3r che si è messo a inzozzare la ml? :D
FXString::text() restituisce un normale const FXchar *
forte!
non sapevo ci fosse una mailing list :D (in giro mi trovi sempre come na01 o ultio ;) )
grazie della risposta!
ciaaaaaaaaaaaaaao
rompo per l'ultima volta.
tralasciando il fatto che non mi riconosce le dischiarazioni di string con string.h incluso :eek:
la domanda è invece questa:
come diavolo si lancia una finestra? con execute mi arriva un bel segmentation fault....
mi potete fare un esempio veloce veloce?:sofico: :mc:
ciao
ilsensine
10-02-2004, 08:22
Puoi postare il codice che non ti funziona?
il punto è che ho trovato milioni di errori...
stò andando un pò di fantasia :D
supponevo di dover derivare una classe da dialogbox e di lanciare execute.
però poi ho visto un costruttore....
FX::FXDialogBox::FXDialogBox ( FXApp * a,
const FXString & name,
FXuint opts = DECOR_TITLE|DECOR_BORDER,
FXint x = 0,
FXint y = 0,
FXint w = 0,
FXint h = 0,
FXint pl = 10,
FXint pr = 10,
FXint pt = 10,
FXint pb = 10,
FXint hs = 4,
FXint vs = 4
)
ma dove và messo?
e poi basta lanciare execute? :wtf:
http://www.fox-toolkit.org/doc.html
qui non ho trovato nulla :(
le ho trovate molto semplici e veloci da imparare, ma mancano i milioni di tutorial e esempi....
ilsensine
10-02-2004, 18:07
tests/dialog.cpp è lì apposta ;)
Ciao ragazzi! Ho finalmente imparato a fare qualcosa con le qt!
Davvero facili e potenti!
Il mio problema è:
da una textedit devo prelevare sotto forma di stringa (testo) e
lo devo memorizzare in una variabile per poi stamparlo nella console, come faccio?
riesco solo a prendere numeri interi o double!!
Ciao e.... spero che mi aiutate!
su!
Per favore!! Aiutatemi voi che siete geni!
Premetto che non conosco le Qt. Con Delphi, quando dovevo passare da intero a stringa o viceversa(vedi prendere un informazione da un edit) usavo una funzione come IntToStr o StrToInt , vedi se esiste qualcosa di simile...dal momento che tu devi passare una stringa in una variabile di tipo stringa non dovrebbero esserci problemi...
non riesco a trovare nessuna funzione di quel tipo!
ripeto: è di tipo text e infatti con text().toInt() riesco a convertire il contenuto (text) in u intero e riesco a stamparlo nella console ma se ci sono lettere nn riesco!
Finalmente sono riuscito! Bastava usare QString e ->text().
Ora le variabili nome e cognome le voglio stampare in un file di testo,
con il c usavo fprintf(nomePuntatore, "Testo %s", nomeVariabileDaStampare) ma con il c++ non so come
fare e poi non posso usare %s perchè nome non è una stringa ma una QString! Come posso fare????
Questo è il file dell'interfaccia creato con qtdesigner e modificato da me:
// funzione stampa
void schedaForm::stampa()
{ QString cognome = cognomeLineEdit->text(); //trasformo il contenuto di
//cognomeLineEdit in testo
QString nome= nomeLineEdit->text(); //faccio lo stesso per nome
FILE *f; //puntatore a file
f=fopen("scheda utente.txt","w"); //creo e apro il file
fprintf(f,"Nome: "); //scrivo nel file
fclose(f); //chiudo il file
}
sono riuscito a stampare sul file...
il problema adesso è che me lo crea solo se lancio il programma da linea di comando con
./nomeprogramma
perchè???
perche solo nomeprog creerebbe conflitti.
con il ./ sei certo che ti attivi il prog nella dir corrente :D
si questo lo so, quello che volevo sapere è perchè mi crea il file solo se lancio il programma da console e non quando lo avvio con kde con il doppio click?
creati un file exec.sh cosi:
#!/bin/bash
./nomefile
Gli dai un chmod +x che lo rende eseguibile e sei a posto :D
non cambia niente... devo sempre usare la linea di comando per avviarlo...
Originariamente inviato da LukA4e
non posso usare %s perchè nome non è una stringa ma una QString! Come posso fare????
nn ha qualche metodo(tipo il .c_str() delle std::string) che te lo casti a const char * ???
sono riuscito a risolvere il problema usando QString ora il problema è quello che non mi crea i file (il programma genera un file.txt) quando avvio il prog da kde con il doppio click ma lo crea solo quando lo eseguo dalla console.
Così te lo crea nella root ?
fopen("/scheda utente.txt","w");
Icedguardian
23-04-2004, 10:44
Quando lanci un'applicazione clickandoci sopra solitamente non riconosce la path d'origine, cioè tu sei convinto che il prog abbia la path dove salvi il file puntata a dove si trova l'eseguibile ma in realtà di solito la path è la home dell'utente. Con le ultimissime Qt dovrebbe essere possibile rislvere il problema in maniera molto semplice, non ho provato ma credo sia sufficiente un istruzione in cui gli dici di posizionarsi nella directory dell'eseguibile.
Con le Qt precedenti io risolvevo il problema nella seguente maniera:
/*
* Quando si clicka sul eseguibile dell'applicazione sotto linux non viene
* riconosciuta correttamente la directory di lavoro. La funzione implementata
* risolve il problema.
*/
#ifdef Q_OS_LINUX
void setWorkPath()
{
QDir::setCurrent(QFileInfo(QFileInfo("/proc/self/exe").readLink()).dirPath());
qWarning("WorkPath:" + QFileInfo(QFileInfo("/proc/self/exe").readLink()).dirPath());
}
#else
void setWorkPath()
{
//Da implementare per altri SO in caso di problemi
}
#endif
Poi richiami la setWorkPath() prima di usare i file.
Spero di aver capito bene il tuo problema, altrimenti ho detto un mucchio di cavolate :D
grazie adesso provo...
volevo domandarvi, posso usare le qt su Windows? Sono gratuite come le gtk?
Da dove scarico le librerie?
Icedguardian
23-04-2004, 15:42
Originariamente inviato da LukA4e
grazie adesso provo...
volevo domandarvi, posso usare le qt su Windows? Sono gratuite come le gtk?
Da dove scarico le librerie?
NO. C'è la versione educational che non è la stessa cosa ed è difficile da ottenere (almeno la mia prof non ci è riuscita).
E' uno dei pochi diffetti delle Qt (IMHO).
Ciao
cosa??
ma allora se le imparo posso solo usarle su linux!
provati le xwWindows, che sono multipiattaforma:D
cavolo! ma le qt vanno benissimo, sono facili e potenti!
e poi con qtdesigner si può fare di tutto in pochissimo tempo!
Originariamente inviato da LukA4e
cavolo! ma le qt vanno benissimo, sono facili e potenti!
e poi con qtdesigner si può fare di tutto in pochissimo tempo!
Ma su Windows non sono free ;)
/\/\@®¢Ø
24-04-2004, 12:31
Originariamente inviato da LukA4e
secondo voi su linux quali sono meglio, per programmare un'interfaccia?
la + facile??
Dipende dal linguaggio...
in C penso siano migliori le Gtk (ci sono ancora i bindings per il C di kde ?)
in C++ preferisco le Gtk, che forniscono (con gtkmm) una libreria _veramente_ C++.
in python siamo piu' o meno li', dipende di piu' dai gusti personali, anche se c'e' da dire che e' piu' facile usare l'editor di forms con le pygtk che con le pyqt.
Icedguardian
26-04-2004, 08:17
Originariamente inviato da LukA4e
cosa??
ma allora se le imparo posso solo usarle su linux!
Non solo, anche per MacOS X ci sono quelle licenziate sotto la GPL.
Non le puoi usare sotto Win.
Le wxWidgets (ora si chiamano così)...sono veramente immediate e facili da usare, magari dagli un'occhiata...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.