PDA

View Full Version : QT e.......


x110
21-07-2004, 09:12
Ciao sto programmando su uno zaurus, e il mio primo programma serio mi sta
dando qualche problemino o meglio alla compilazione mi dice:
sharp.o undefined reference to Myapp::QPaintDevice virtual table
e altri errori della serie che sono propi del linker.

dovrei aver sbagliato qualcosa di forma....
se notate qualcosa di strano....
ho tagliato il grosso del programma perche' penso sia un problema di forma.
ci sono 2 classi la mia app e un'altra(incassi)
schiacciando un pulsande della app si apre il widget incassi....


class Myincassi: public QWidget{
public:
Myincassi(QWidget *parent=0,const char *name=0,int flag=0);
};

class Myapp:public QWidget{
Q_OBJECT
public:
Myapp(QWidget *parent=0,const char *name=0);
public slots:
void openincassi();
};

Myincassi::Myincassi(QWidget *parent,const char *name,int flag):QWidget(parent,name){

QTabWidget *Tab=new QTabWidget(this,"Tabw");
QWidget *pag1w=new QWidget(Tab,"pag1");
pag1w->setFixedSize(236,260);
Tab->addTab(pag1w,"&Acquisizione");

this->setGeometry(0,0,240,320);
this->show();
}
Myapp::Myapp(QWidget *parent,const char *name):QWidget(parent,name){
QVBox *box=new QVBox (this);

box->resize(240,200);
QPushButton *p_incassi=new QPushButton("INCASSI",box);
QPushButton *p_comunicazione=new QPushButton("COMUNICAZIONE",box);
QObject::connect(p_incassi,SIGNAL(clicked()),this,SLOT(openincassi()));
QObject::connect(p_comunicazione,SIGNAL(clicked()),qApp,SLOT(quit()));
this->setGeometry(10,50,220,160);
};
void Myapp::openincassi(){
Myincassi *INCASSI_FRM=new Myincassi(0,"AA");
}

int main(int argc,char **argv){

QApplication a(argc,argv);
Myapp mainw;
a.setMainWidget(&mainw);
mainw.show();
return a.exec();
}

ilsensine
21-07-2004, 10:10
Sicuro che linki con le Qt?

x110
21-07-2004, 16:12
ho usato il tmake per creare il makefile e finora, che non ho usato il Q_OBJECT
tutto andava liscio.
ho aggiunto il Q_OBJECT e un public slot e non va piu'

vuoi che ti mando il Makefile?

il linking avviene con -lqte -lqpe in questo modo:
gcc -o sharp sharp.o -L/home/QtPalmtop/lib -lqte -lqpe

dovrebbero essere le qt embedded

l'errore e':

sharp.0(.text+0x156c): undefined reference to 'Myapp::QPaintDevice virtual table'

ilsensine
21-07-2004, 16:32
No non conosco la programmazione con le Qt, e il "loro" sistema di compilazione mi sta un pò sulle scatole.

Potrebbe essere che le Qt embedded non hanno tutte le classi delle Qt normali. Questo problema dovresti girarlo alla Trolltech.

x110
21-07-2004, 18:09
sinceramente la classe qwidget e' sicuramente valida anche
per le embedded in quanto struttura base e' come se al vb mancasse il forrm,

per quanto riguarda la compilazione sono del tuo stesso parere.

comunque spero che qualcuno al di fuori della trolltech mi risponda vuoi perche' in italiano voui perche' non ho urgenza.... o per pigrizia.

comunque potrebbe essere perche' ho sbagliato il modo di ereditare la classe?

l'errore di forma e' piu' probabile oppure l'ereditazione e' corretta?
questo dovrebbe essere un problema standard del c++ e non di qt.

ciao.:)

x110
22-07-2004, 15:03
ok il problema era nel sistema di compilazione di qt:rolleyes:
o meglio avendo fatto un unico file per poterlo avere sottomano dato le scarse dimensioni
del display dello sharp il gcc non trovava della roba....
risoluzione...
includere alla fine del file il file sharp.moc generato dallo stesso moc.

oppure creare un file per ogni classe e per ogni implementazione.

ciao.;)