Pagina 1 di 1

Qt 4.4.1: Help!!!!!

Inviato: domenica 14 settembre 2008, 22:46
da craft
Ciao a tutti ecco il mio problema: ho installato(scaricandole dal sito della Trolltec le qt4, ho copilato e tutto ok (ovviamente, prima che lo dimentico, uso kubuntu 8.04 con kde 3.5.10)
Crei il mio programmino, gli do i seguenti comandi:
qmake-project
qmake
make
ma al make mi da il seguente errore:
uic: File generated with too recent version of Qt Designer (4.0 vs. 3.3.8b)
make: *** [untitled.h] Error 1
credo d'aver fatto qualche casino...nel senso che forse ho una versione vecchia di make e con adept non ne trovo una più nuova...
Help........... ::)

Re: Qt 4.4.1: Help!!!!!

Inviato: domenica 14 settembre 2008, 23:21
da Spiros
Devi usare qmake 4, e non qmake 3. Hai cercato di usare qmake 3 per compilare un progetto scritto con le QT4. Da terminale dai un

Codice: Seleziona tutto

sudo update-alternatives --config qmake
E seleziona qmake-qt4. In questo modo quando darai un qmake il sistema andrà a prendere la versione 4.

Buon lavoro (e divertimento) con le Qt!

Re: Qt 4.4.1: Help!!!!!

Inviato: domenica 14 settembre 2008, 23:26
da craft
mmmmm, guarda che mi dice il terminale:
C'è un solo programma che fornisce qmake
(/usr/bin/qmake-qt3). Non c'è nulla da configurare.
come è possibile?

Re: Qt 4.4.1: Help!!!!!

Inviato: domenica 14 settembre 2008, 23:51
da Spiros
Probabilmente perché hai compilato da solo le Qt invece di installarle da repo. Immagino che qmake-qt4 sia installato in /usr/local/bin. Controlla che esista effettivamente, quindi prova a compilare il tuo progetto, ma invece di qmake -project usa /usr/local/bin/qmake-qt4 -project e lo stesso per qmake, subito dopo. Se non c'è in /usr/local/bin, oppure non si chiama così, trovalo (potrebbe essere in /usr/local/lib, in /opt, ...) e crea un symlink in /usr/bin chiamato qmake e toglilo dalle /etc/alternatives.

Re: Qt 4.4.1: Help!!!!!

Inviato: lunedì 15 settembre 2008, 11:09
da craft
Allora ho trovato un qmake (e non un qmake-qt4, anche se sinceramente mi sembra strano dato che ho in /usr/bin un qmake-qt3 ) in /usr/local/Trolltech/Qt-4.4.1/bin ed è l'indirizzo da cui avvio anche Assistant e Designer...
Si ho compilato senza installare da Synaptic
Mi consigli di disinstallare ed reinstallare da Synaptic o creo il collegamento?
Curiosità: da terminale ho dato più volte il comando :
/usr/local/Trolltech/Qt-4.4.1/bin/qmake-project
e mi rispondeva con un errore tipo nessun file o directory..
Ciao.

Re: Qt 4.4.1: Help!!!!!

Inviato: lunedì 15 settembre 2008, 11:53
da Spiros
Non so quanto tu sia a conoscenza delle variabili d'ambiente, del funzionamento della bash eccetera, ma:
  • Un sistema compilato (correttamente) è più rapido e meglio funzionante di un sistema installato precompilato (quindi se le qt che hai compilato funzionano tieniti quelle)
  • Le Qt sono installate tutte in /urs/local/Trolltech/Qt-4.4.1/ (librerie, headers, eseguibili,...). Quindi se vuoi aprire un programma (per esempio assistant) devi aprire /usr/local/Trolltech/Qt-4.4.1/bin/assistant, oppure mettere /usr/local/Trolltech/Qt-4.4.1/bin/ nel PATH. Anche qmake si trova lì.
  • qmake-project non esiste. Per fare quello che vuoi fare devi digitare qmake -project (ossia: -project è un parametro da passare a qmake, quindi c'è lo spazio in mezzo)
Se non è chiaro chiedi pure.  :D

Re: Qt 4.4.1: Help!!!!!

Inviato: lunedì 15 settembre 2008, 13:10
da craft
mmmm, non mi ero accorto che non avevo inserito lo spazio tra qmake e -project :-[
Effettivamente non sono molto esperto di tutte quelle diavolerie che hai appena menzionato :-[ ma sto provando a rimediare...
Il mio vero problema e che dopo anni di windows e programmazione in visual basic credevo che anche con il c++ avrei potuto programmare molto semplicemente e creare programmini con una gui..in visual basic(come gambas)  disegno la mia gui poi clico ad esempio su un pulsante che ho precedentemente inserito e ad sempio, al click su di esso gli faccio fare una cosa....col c++ (che sto studiando) riesco a fare programmini che funzionano tramite la bash ma appena provo ad inserire una interfaccia grafica vado in tilt perchè non ho ancora ben capito come cavolo associare ad un pulsante una parte di codice per fargli fare qualcosa.... :-[
comunque tornando a noi ora funziona ma al make mi restituisce il seguente errore:
luigi@luigi-desktop:~/Documenti/Programmazione Qt$ make
/usr/local/Trolltech/Qt-4.4.1/bin/uic untitled.ui -o ui_untitled.h
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.4.1/lib -o Programmazione\ Qt    -L/usr/local/Trolltech/Qt-4.4.1/lib -lQtGui -L/usr/local/Trolltech/Qt-4.4.1/lib -L/usr/X11R6/lib -pthread -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [Programmazione Qt] Error 1
che sinceramente credo che sia dovuto ad una cattiva programmazione, me lo confermi?
Per usare qmake digitando semplicemente qmake ora come dovrei fare?
symlink
? Come si fa? :-[
Un sistema compilato (correttamente) è più rapido e meglio funzionante di un sistema installato precompilato (quindi se le qt che hai compilato funzionano tieniti quelle)
Per questo molti dicono che gentoo o simili sono "migliori" di ubuntu/fedora/suse? che sono precompilati?vero? ???
(ot)Ma ora gentoo non attraversa un momento di crisi?
Ciao e grazie...

Qt 4.4.1

Inviato: lunedì 15 settembre 2008, 17:59
da Spiros
craft ha scritto:
Un sistema compilato (correttamente) è più rapido e meglio funzionante di un sistema installato precompilato (quindi se le qt che hai compilato funzionano tieniti quelle)
Per questo molti dicono che gentoo o simili sono "migliori" di ubuntu/fedora/suse? che sono precompilati?vero? ???
(ot)Ma ora gentoo non attraversa un momento di crisi?
Crisi? Non ne so niente. Io la usicchio e non è male. Poi... Gentoo è Gentoo, il portage, la configurazione, il fascino... Il fatto che sia un sistema che ti compili tu ti porta sì ad avere un software perfettamente adattato al tuo hardware, personalizzato eccetera, ma al giorno d'oggi, con i processori che ci sono la differenza non è così marcata.  (ot)
craft ha scritto: comunque tornando a noi ora funziona ma al make mi restituisce il seguente errore:
luigi@luigi-desktop:~/Documenti/Programmazione Qt$ make
/usr/local/Trolltech/Qt-4.4.1/bin/uic untitled.ui -o ui_untitled.h
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.4.1/lib -o Programmazione\ Qt     -L/usr/local/Trolltech/Qt-4.4.1/lib -lQtGui -L/usr/local/Trolltech/Qt-4.4.1/lib -L/usr/X11R6/lib -pthread -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [Programmazione Qt] Error 1
che sinceramente credo che sia dovuto ad una cattiva programmazione, me lo confermi?
Manca solo una cosa: il main. Quando fai un progetto c++, ti conviene fare così: ci dev'essere un file chiamato main.cpp che contiene la funzione main(). Il file può essere così:

Codice: Seleziona tutto

#include <iostream>
#incliude <QtGui>
#include "MyPushButton.hpp"

using namespace std;

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    MyPushButton* button = new MyPushButton();
    button->show();
    return app.exc();
}

E poi per ogni classe fatta da te (nell'esempio: MyPushButton) ci dev'essere un file "header" con nome uguale al nome della classe ed estensione .hpp e un file con nome uguale e estensione .cpp. Nell'header metti la definizione della classe (qui l'esempio del MyPushButton) con i prototipi dei metodi:

Codice: Seleziona tutto

#include <QtGui>

class MyPushButton : public QPushButton
{
public:
    MyPushButton();
};
Nell'altro file scrivi le definizioni dei metodi (stesso esempio, file MyPushButton.cpp):

Codice: Seleziona tutto

#include "MyPushButton.hpp"

MyPushButton::MyPushButton()
    : QPushButton(tr("Ciao, mondo!"))
{}
Come vedi la classe MyPushButton non è altro che un QPushButton, solo che il costruttore richiama il costruttore di QPushButton dandogli il parametro tr("Ciao, mondo!")) in modo che tutti i MyPushButton hanno la scritta "Ciao, mondo!".

Il file header dev'essere #incluso sia dal file .cpp della classe, in modo che la classe sia definita quando si definiscono i metodi, sia dai file in cui viene usata la classe (qui per esempio nel main, ma può essere usata anche da altri file, per esempio in MyMainWindow in cui il widget centrale è un MyPushButton). Invece il file .cpp non viene mai incluso altrove e viene compilato da solo. La compilazione di MyPushButton.cpp genera un file oggetto (MyPushButton.o), così come per tutte le altre classi e per il main. Poi questi file oggetto vengono uniti. Ma della compilazione si occupa qmake. Tu devi solo far sì che lui si trovi un progetto ben strutturato, con il main.cpp, le varie classi con header e file cpp e le inclusioni corrette.
Quando dai un qmake -project lui legge il progetto, controlla i file che ci sono e prepara la compilazione. Poi il comando qmake legge il file di progetto, legge i vari file e scrive un Makefile che sappia dove trovare tutto ciò che gli serve eccetera. Con make semplicemente compili.

Beh, mi sono fatto capire? La sostanza è che ti serve un main.

Semmai crea una cartella Prova, mettici dentro i file dell'esempio che ti ho fornito e prova a compilare.
craft ha scritto:
symlink
? Come si fa? :-[
Il symlink si ottiene con il comando ln -s file link e ti permette di creare un link chiamato link al file file. Sono validi sia percorsi assoluti che relativi, ma ovviamente per indicare correttamente il file da linkare è meglio usare sempre percorsi assoluti.

Ma piuttosto che creare questi link è meglio lavorare sul PATH. Apri un terminale e digita il comando echo $PATH: vedrai una serie di percorsi separati da ":". Queste sono le directory in cui il sistema cerca i file eseguibili, in modo che quando tu digiti aptitude lui traduce in /usr/bin/aptitude. È sufficiente che tu inserisca /usr/local/Trolltech/Qt-4.4.1/bin nel PATH predefinito per non dover più andare tu a cercare qmake o assistant, ma lo faccia il sistema.
Ora, la definizione del PATH non so più bene dove sia nelle ultime versioni di Ubuntu. Comunque se tu inserisci un file qt.sh nella directory /etc/profile.d con questa riga all'interno, dovrebbe andare (ma prima devi anche fare logout/login):

Codice: Seleziona tutto

export PATH=$PATH:/usr/local/Trolltech/Qt-4.4.1
Ok, ora devo scendere in cantina...

P.S.: sì, sono in lizza per il premio "Post più lungo della storia"...

P.P.S.: per i blocchi di codice usa il tag [ code ] invece di usare [ quote ].

Re: Qt 4.4.1: Help!!!!!

Inviato: lunedì 15 settembre 2008, 20:07
da craft
Spiros, non so come ringraziarti, è quasi un anno che tento di capirci qualcosa inviando milioni di post sul c++(se cerchi ne troverai molti) e mai nessuno è stato così chiaro e gentile da farmi cominciare a capire qualcosina...Sai per chi di informatica ne sa poco (uso il pc praticamente per lavorare con calc ed internet da anni, ora per me è per tanti è un momento di crisi totale....guarda cosa è accaduto a Lehman e soci... ) è difficile cominciare a capire il funzionamento del c++
Il mio progetto credo che sia semplice, allora io creo una gui con qtdesiger (quindi senza scrivere nulla ma disegnandola come se stessi usando gambas)
poi dovrei creare il main.cpp (e dentro che ci scrivo? ho letto milioni di guide ma non ci sono mai riuscito) vorrei poi avviare la mia gui contenente un pulsante che cliccato mi apra una finestra di dialogo (ovviamente disegnata in precedenza) oppure che al click del tasto mi scriva "ciao mondo" o non so che faccia qualcosa. Ho capito che entrano in gioco i parametri signal e slot ma non ho ben capito come farli funzionare...
Perdona ma la classe(il file .hpp contiene quello che deve fare il pulsante? o non ho capito un tuborg?)
Insomma Aiutoooooooooooo che forse posso cominciare a creare qualcosa....(mi piacerebbe tanto!!!!!!!!!!)
Io ho sempre usato il visual basic e li le cose erano molto più semplici ma quando ho incontrato in c++ si è instaurato un rapporto di odio/amore..
Comunque ciao e grazie.
Mo beviamoci una birra... (b2b)

Re: Qt 4.4.1: Help!!!!!

Inviato: lunedì 15 settembre 2008, 22:16
da Spiros
Qualche tempo fa avevo provato a tuffarmi nelle GTK: per prima cosa disegnavo con Glade l'interfaccia, poi iniziavo a scrivere il programma richiamando i widgets che avevo disegnato e scrivendo il loro comportamento, facendo i collegamenti,...
Questo più o meno è quello che facevi tu con Visual Basic e Gambas (credo, sono cose che non ho mai usato). Con le Qt questo non lo so fare, un po' perché nel frattempo mi sono evoluto, un po' perché sospetto che con le Qt la storia sia un po' diversa. Certo, c'è il designer, ma io non lo so usare, o meglio non so integrare nei programmi. Semplicemente disegno la gui scrivendola.

Secondo me (ma questa è la strada che ho percorso io...) prima impari a usare bene il c++ (non dico che devi essere un professionista, ma sapere la teoria: che cos'è una classe, una struct, i tipi di base, l'input/output, la STL, come si scrive davvero una classe e perché, i prototipi delle funzioni, l'overloading. Io ho iniziato a programmare davvero in Python, in cui per definire una classe semplicemente scrivi la classe, con i metodi, definisci direttamente i metodi ed è finita. In c++ prima scrivi che cosa contiene la classe: proprietà (variabili) e metodi (funzioni). Non devi dire quanto valgono o a che cosa servano. Devi solo dire che esistono di che tipo sono, che tipo restituiscono, i parametri che prendono.
La definizione dei metodi (cioè la scrittura vera e propria delle funzioni) si fa a parte. All'inizio mi sembrava così stupido. Poi ho capito...

Quanto alle Qt, quando hai fatto quanto ho detto sopra (ma non per forza, anche durante, in fondo così impari più cose alla volta), inizia dai tutorial, ti insegna molto. Impara a scrivere il programma, perché la gui fa parte del programma. Impara che cos'è un widget, come funzionano le eredità, impara che cosa sono i signals e gli slots (all'inzio ci si mette un po', se segui questa strada ricordami, che ti do qualche dritta, perché vedrai: quanto avrai capito dirai "Ora ho capito!", poi inizierai a scrivere un programma e dirai "Ma questo non lo posso fare!" e poi ci penserai a lungo e dirai "Ma questo è un casino!", eccetera,...). Impara a usare l'assistant. Quando scrivo Qt dietro l'editor c'è l'assistant. Qualcuno ha perso giornate intere a rompersi i ... per scrivere quella documentazione, ti assicuro che lo incontrassi lo bacerei. È in inglese, sì, ma non c'è altra possibilità...

E, lo so che suona orribile e antipatica, ma... niente fretta. Impara a mostrare all'utente un pulsante, poi un pulsante con la scritta che cambia quando ci clicca, poi .... poi piano piano inizia a scrivere una finestra degna di questo nome. Il designer... arriverà.

Re: Qt 4.4.1: Help!!!!!

Inviato: martedì 16 settembre 2008, 11:25
da craft
quello che mi dici tu è proprio quello che sto facendo, sto imparando il c++(certo non sono un genio) e contemporaneamente studio le qt per creare la mia prima applicazione...
Leggo Assistant e vedo gli esempi ma comunque non mi riesce nulla (l'unico mio progetto funzionante è un semplice programma che esegue operazioni aritmetiche e geometriche) ora vorrei poter fare qualcosa di più complesso....
Comunque grazie mille e ciao. ;D