Portál AbcLinuxu, 12. května 2024 05:06


Dotaz: Qt - pokus vytvořit vlastní widget

8.7.2004 17:04 Pavel
Qt - pokus vytvořit vlastní widget
Přečteno: 235×
Odpovědět | Admin
Snažím se vytvořit si vlastní widget, aby mi při stisku klávesy poslal signal, zkousel jsem to na LineEditu, (v praxi to však potřebuji u tabulkyu), z manuálu jsem se pokusil napsat třídu, která by to měla dělat. Překlad proběhne OK, ale při linkování to vyhodí chyby nevíte, kde je chyba. Dík moc Pavel

#include qwidget.h

#include qlineedit.h

#include qevent.h

class mln :public QWidget

{

Q_OBJECT

public:

mln( QWidget *parent = 0, const char *name =0);

~mln() {}

protected:

void keyPressEvent(QKeyEvent *e);

signals:

void press();

};

mln::mln(QWidget *parent, const char *name) :

QWidget(parent, name)

{

QLineEdit *le = new QLineEdit(this, "mln");

}

void mln::keyPressEvent(QKeyEvent *e)

{

emit press();

}

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Pavel Stárek avatar 8.7.2004 17:31 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Qt - pokus vytvořit vlastní widget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi by bylo dobré taky poslat tu chybu kterou to vyhodí. :-)
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
8.7.2004 17:50 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Qt - pokus vytvořit vlastní widget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předpokládám, že postupuješ např. podle http://www.root.cz/clanek/2211?

Nebo jen tak spouštíš gcc na to, cos sem vložil? (BTW používej <pre> tag. Bude to pak aspoň k přečtení...)
8.7.2004 18:29 pavel
Rozbalit Rozbalit vše Re: Qt - pokus vytvořit vlastní widget
To je jasný, že mám vytvořenej projekt, formulář, ...
g++  -o pokus .obj/main.o .obj/mainform.o \
.obj/moc_mainform.o  -L/usr/lib/qt3//lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
.obj/mainform.o(.text+0x33): In function `mln::mln[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for mln'
.obj/mainform.o(.text+0x3a): In function `mln::mln[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for mln'
.obj/mainform.o(.text+0xc3): In function `mln::mln[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for mln'
.obj/mainform.o(.text+0xca): In function `mln::mln[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for mln'
.obj/mainform.o(.text+0x121): In function `mln::keyPressEvent(QKeyEvent*)':
: undefined reference to `mln::press()'
collect2: ld returned 1 exit status
make: *** [pokus] Error 1
8.7.2004 18:38 karlok
Rozbalit Rozbalit vše Re: Qt - pokus vytvořit vlastní widget
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tezko rici, kde zacit

1) do definice tridy by jsi mel pridat definici funkce napr. setText

public slots: void setText( const QString &string ) { ... bla bla ...; };

2) a konstruktoru pak tuhle funkci pripojis pomoci "connect" nasledujicim zpusobem mln::mln(QWidget *parent, const char *name) :

QWidget(parent, name)

{

QLineEdit *le = new QLineEdit(this, "mln"); connect( le, SIGNAL(textChanged(const QString&)), this, SLOT(setText(const QString&)) ); }

3) pak pomoci "moc" vygenerovat napr. main.moc.cpp a cele to zkompilovat a slinkovat. Pak by to snad melo fungovat
15.1.2006 16:47 MaCrek
Rozbalit Rozbalit vše Re: Qt - pokus vytvořit vlastní widget
Odpovědět | | Sbalit | Link | Blokovat | Admin
No sice je prispevok stary 2 roky, ale mozno to niekomu pomoze:

Ak je v qt definovana trieda v subore *.cpp je potrebne na koniec tohto suboru includnut *.moc.

vid.:
http://doc.trolltech.com/3.0/commonproblems.html#linkerror http://doc.trolltech.com/3.0/moc.html
15.1.2006 16:48 MaCrek
Rozbalit Rozbalit vše Re: Qt - pokus vytvořit vlastní widget
Odpovědět | | Sbalit | Link | Blokovat | Admin
sakra, zabudol som jeden brejk, su tam 2 adresy...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.