Newsgroup: it.comp.os.linux.development
Titolo: Q_OBJECT e QTextEdit

Ciao, avrei due domande, di cui una rappresenta un problema:
Ho creato una mia classe che viene richiamata dal widget principale
e tutto funziona bene...
Adesso, nella classe voglio gestire un segnale emesso da un membro
della classe (QTextEdit appunto), ma quando aggiungo la macro Q_OBJECT, 
il compilatore mi segnala questo strano messaggio:
: undefined reference to `vtable for TMyTab'
Ho visto la guida, il tutorial, e tutti gli esempi usano semplicemente
la cosa come l'ho fatta io, ma a me da questo problema!!
La seconda cosa è: come faccio a controllare ogni singolo carattere che
viene digitato nella QTextEdit, tipo keypress di VB?!?!?
Grazie a tutti

 Grazie a tutti
ciao ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

 controlli
Anche io ho immaginato che questo fosse la tecnica giusta, però non esiste
qualcosa che elabora sui singoli char al momento dell'inserimento!??!
In ogni caso grazie, ma se non risolvo la storia di Q_OBJECT, non posso 
provare il controllo sul testo! :-(

 qualcosa che elabora sui singoli char al momento dell'inserimento!??!
non su QTextEdit, a quanto ne so ... ti ci vorrebbe un QValidator, ma non e'
previsto per la classe ...


 the former case) include that object file in the link command.
]zac[
Concordo, non è stato incluso l'header generato da moc.
Esempio:
 in .h:
#ifndef KMPOPFILTERCNFRMDLG_H
#define KMPOPFILTERCNFRMDLG_H
#include <kdialogbase.h>
#include "kmpopheaders.h"
class KMPopFilterCnfrmDlg : public KDialogBase
{
    Q_OBJECT
..........
in .cpp
#include "kmpopfiltercnfrmdlg.h"
#include "kmheaders.h"
#include "kmcommands.h"
// Dialog
KMPopFilterCnfrmDlg::KMPopFilterCnfrmDlg( QPtrList<KMPopHeaders> *aHeaders,
const QString &aAccount, bool aShowLaterMsgs, QWidget *aParent, const char
*name )
      : KDialogBase( aParent, name, TRUE, i18n( "POP Filter" ), Ok | Help,
Ok, FALSE )
{
..........
#include "kmpopfiltercnfrmdlg.moc"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Cosa devo fare?!?!
Non sono pratico, diciamo che ho iniziato da qualche giorno ad 
utilizzare le QT...e vorrei continuare :-)

 utilizzare le QT...e vorrei continuare :-)
hai provato a dare 
make clean
qmake -project
qmake
prima di compilare ???


 
Penso di si...il fatto è che uso il kdevelop 3.2; ho ricompilato il 
subprogetto ed il progetto.

 subprogetto ed il progetto.
e qui alzo le mani ;-)) allora devi controllare qualche impostazione di
kdevelop, visto che a mano ti compila.
ciao ...


 
Ti va di collaborare ad un progetto software per l'invio di SMS vodafone
basato su rubrica telefonica??
Ho creato una libreria di cui distribuisco il binario, che permette di 
inviare SMS appoggiandosi sul sito vodafone 
www.190.it
Ho ultimato la versione multi-thread per linux, che permette di inviare
N messaggi ad N utenti, con report finale per ogni invio.
Sto appunto creando l'interfaccia grafica che permette di fare tutto 
questo, con i piccoli problemi su esposti. Siccome vorrei iniziare
l'implementazione multi-thread anche per Winzozz, non ho molto tempo
a disposizione per lavorare anche all'interfaccia grafica...
Se tu o qualsiasi altro vuole partecipare, non ci sono problemi.
Per l'interfaccia di programmazione, basta scaricare il KIT di
sviluppo (non è presente ancora quella relativa al multithread):
http://www.kuht.it/modules/mydownloads/viewcat.php?cid=49&orderby=hitsA
Ciao

 Ciao
ciao ..


 
Allora, ho risolto il problema in questo modo:
Ho aperto il Makefile, e aggiunto la dipendenza del moc per
il mio file su specificato (copiando quello già esistente).
Non funzionava...poi ho fatto:
make clean
qmake nomeprogetto (non ha risposto nulla ma è tornato al prompt)
qmake (idem)
poi ho ricompilato il subproject ed il progetto ed ho notato che nella
compilazione ha generato anche il moc_tmytab.cpp in automatico!
Adesso funziona, ma non ho capito, dopo l'aggiunta al Makefile, come ho
fatto per farlo funzionare!

 subprogetto ed il progetto.
Leggi la documentazione in ' /usr/share/doc/qt-devel-xyz ' ci sono varie
lezioni che spiegano come usare le QT.
Comunque con ' qmake -project ' crei un progetto QT, con ' qmake ' crei il
Makefile necessario (da cui puoi prendere spunto per modificare il Makefile
creato da kdevelop).
Altrimenti prendi il sorgente di una qualsiasi piccola applicazione per kde
e usi quella come base.

 lezioni che spiegano come usare le QT.
L'ho fatto, ed ho anche studiato tutti i tutorial della documentazione. 
In questi, come negli esempi, usa la macro come la uso io, senza dire 
che ci possono essere problemi...in effetti mi sa che il problema lo 
crea kdevelop che non include il file nella compilazione di qmake, 
tant'è che l'ho dovuto inserire a mano nel makefile e ora funziona.

 : undefined reference to `vtable for TMyTab'
Risposta veloce: touch 
nomeprogetto.pro
 ; make
Risposta lenta: qmake, quando genera il makefile a partire dal file 
progetto, va a guardare se per ogni file .h deve chiamare il moc. Nel 
tuo caso, molto probabilmente quando qmake ha generato il makefile non 
c'era ancora la macro Q_OBJECT, che hai aggiunto DOPO, pertanto nel 
makefile non ci sono le informazioni necessarie per il moc. Facendo 
touch 
progetto.pro
, gli si cambia la data di ultima modifica; il 
makefile generato è abbastanza "furbo" da accorgersi che deve richiamare 
qmake e quindi rigenerarsi. Spero si capisca qualcosa :-)

 tuo caso, molto probabilmente quando qmake ha generato il makefile non 
[cut]
bene perfetto, grazie per la spiegazione!
Abbastanza chiara.... ;-)