PDA

View Full Version : Qt3 o Gtk?


LukA4e
27-01-2004, 20:24
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]

NA01
28-01-2004, 06:21
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 )

LukA4e
28-01-2004, 13:48
adesso provo...

NA01
28-01-2004, 19:35
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.

NA01
28-01-2004, 19:49
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

LukA4e
28-01-2004, 20:07
è difficile utilizzare glade e programmare le interf.?

ilsensine
28-01-2004, 20:16
Nel frattempo sposto in Programmazione, che qui siamo un pò OT...

MrAsd
28-01-2004, 21:49
Io preferisco le gtk :)

NA01
30-01-2004, 13:59
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.

NA01
31-01-2004, 20:55
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 :)

NA01
01-02-2004, 08:19
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)

NA01
01-02-2004, 11:14
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

NA01
02-02-2004, 19:35
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.

NA01
03-02-2004, 06:20
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

NA01
09-02-2004, 19:58
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?

NA01
10-02-2004, 17:48
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 ;)

LukA4e
21-04-2004, 15:58
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!

LukA4e
21-04-2004, 18:32
su!
Per favore!! Aiutatemi voi che siete geni!

gokan
21-04-2004, 20:04
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...

LukA4e
21-04-2004, 20:27
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!

LukA4e
21-04-2004, 21:33
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
}

LukA4e
22-04-2004, 18:53
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è???

Luc@s
22-04-2004, 18:55
perche solo nomeprog creerebbe conflitti.
con il ./ sei certo che ti attivi il prog nella dir corrente :D

LukA4e
22-04-2004, 20:07
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?

Luc@s
22-04-2004, 20:11
creati un file exec.sh cosi:

#!/bin/bash

./nomefile

Gli dai un chmod +x che lo rende eseguibile e sei a posto :D

LukA4e
22-04-2004, 20:15
non cambia niente... devo sempre usare la linea di comando per avviarlo...

Luc@s
22-04-2004, 20:23
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 * ???

LukA4e
22-04-2004, 20:26
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.

cionci
22-04-2004, 20:46
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

LukA4e
23-04-2004, 13:41
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

LukA4e
23-04-2004, 18:02
cosa??

ma allora se le imparo posso solo usarle su linux!

Luc@s
23-04-2004, 19:12
provati le xwWindows, che sono multipiattaforma:D

LukA4e
23-04-2004, 19:59
cavolo! ma le qt vanno benissimo, sono facili e potenti!
e poi con qtdesigner si può fare di tutto in pochissimo tempo!

cionci
24-04-2004, 04:25
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.

cionci
26-04-2004, 08:49
Le wxWidgets (ora si chiamano così)...sono veramente immediate e facili da usare, magari dagli un'occhiata...