Seite 1 von 1
Signals and Slots ... warum gehts denn nicht?
Verfasst: 24. Mai 2006 16:48
von download123
Ich habe jetz mla mit dem designer ein main window erstellt...
mit einem Button, und wollte das beim klicken eine funktion der klasse aufgerufen wird... umgesetzt so
Code: Alles auswählen
class Ui_Login_w : public QObject
{
public:
bool test;
....
QPushButton *pushButton;
....
void setupUi(QMainWindow *Login_w)
{
test=false;
......
QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(Click_Connect()));
}
....
public slots:
void Click_Connect()
{
connected = true;//wert neu setzen
}
}
Aber irgendwie gehts nicht ... die variable bleibt auf false
was ist falsch...
[da wo punkte sind ist anderer Code dazwischen, der aber nicht von belang ist (design des fensters)]
Verfasst: 24. Mai 2006 16:59
von Querdenker
Hi,
du musst dem MOC ja auch was zum schaffen geben. Das tut der aber nur, wenn Du in der Klasse ein Q_OBJECT eingibst.
lass Ui_Login_w : public QObject
{
Q_OBJECT
public:
bool test;
....
QPushButton *pushButton;
....
void setupUi(QMainWindow *Login_w)
{
test=false;
......
QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(Click_Connect()));
}
....
public slots:
void Click_Connect()
{
connected = true;//wert neu setzen
}
}
damit weiß MOC, dass diese Klasse Slots und Signals verwendet und bindet den Code dazu ein. Ein bloßes erben von QObject reicht nicht aus.
Verfasst: 24. Mai 2006 17:10
von download123
Vielen dank für die schnelle hilfe...
allerding hab ich immernoch ein problem ... nämlich den linker error der jetzt kommt
Code: Alles auswählen
.objs\main.o:main.cpp:(.text$_ZN10Ui_Login_wC1Ev[Ui_Login_w::Ui_Login_w()]+0x20): undefined reference to `vtable for Ui_Login_w'
collect2: ld returned 1 exit status
es hat scheinbar was mit dem Q_OBJECT zu tun weil wenn ich es auskommentiere ist der error weg
Verfasst: 24. Mai 2006 17:40
von Eltharion
Schreibst Du die Makefiles zufällig per Hand? Ich tippe mal drauf, dass der vom moc erzeugte C++-Quelltext nicht mit eingelinkt wird. moc erzeugt doch irgendwo eine C++-Datei. Kannst Du die einfach mal in Deiner Klasse mit inkluden? Dann weisst Du, ob's daran liegt. Oder nimm die von qmake erstellten Makefiles. Da wird der moc-Code automatisch mit übersetzt und verlinkt.
E*
Verfasst: 24. Mai 2006 17:50
von Querdenker
Hi,
das war fast klar

Du musst natürlich auch eine neue ProjektFile anlegen.
Verfasst: 24. Mai 2006 17:54
von download123
Also .. ich schreibe makefiles nicht per hand ich benutze Code::Blocks [ging bisher sehr gut]
ich weiß leider nicht genau was du meinst ... benutze qt noch nicht lange...
ich habe mal den completten code der classe hochgeladen
http://pastebin.com/735241
Verfasst: 24. Mai 2006 18:19
von Querdenker
Hi,
ich meinte mit neuer Projektdatei erstellen:
ShellPrompt>qmake -project
ShellPrompt>qmake verzeichnisname.pro
ShellPrompt>make
dann dürfte der make des MOC mitkommen.
Ich verwende Relo als Entwickungstool und kompiliere per Command Line mit dem MinGW.
Dein uploaded Beispiel dürfte kaum eine Klassendefinition darstellen und auch keine Implementierung einer solchen. Da ist was durcheinander gekommen - oder?
Verfasst: 24. Mai 2006 18:23
von download123
eigentlich nicht....
es ist das was ich rauskriege wenn ich ein qtdesignerfile (.ui) mit der console und dem uic befehl in source verwandeln lasse....
ja eigentlich gehöhrt sich das nicht.... aber imprinzip ist das eine Klassendefinition in der gleich der Code der Klassen mit drin ist
ich habe das projekt schon mehrfach neu compiliert...[alles bis auf den Source gelöscht und neu erstellen lassen]
Ich habe beim Compilieren generell probleme mit dem
Q_OBJECT
es erzeugt
undefined references... muss ich irgendwelche speziellen libarys linken?
momentan gelinkt ist [ in dieser Reihenfolge]
libQt3Support4.a
libQtAssistantClient.a
libQtCore4.a
libQtDesigner4.a
libQtDesignerComponents4.a
libQtGui4.a
libqtmain.a
libQtNetwork4.a
libQtOpenGl4.a
libQtSql4.a
libQtXml4.a
Verfasst: 24. Mai 2006 19:07
von Querdenker
ah so,
ne, mit Designern habe ich nichts am Hut (Gibt nur Ärger und Verdruß wenn man deren Wirkungsweise nicht wirklich versteht - oder die Designer glauben umzusetzen, was gemeint sein könnte).
self made ist die Devise und ist wesentlich schneller als sich mit Designer-Results herum zu ärgern

Verfasst: 24. Mai 2006 19:21
von download123
ich habe ja zwischendurch auch einfach mal so ne slotklasse versucht...
sobald
Q_OBJECT
auftrit bekomme ich den linkerfehler
[habe das beispiel aus der dokumentation genommen]
Verfasst: 24. Mai 2006 20:16
von Eltharion
Lade den letzten Versuch einfach mal hoch. Die slot-Klasse, das main() und die .pro Datei. Sonst können wir auch nur raten. Dein problem hat tatsächlich was mit dem Q_OBJECT tu tun und egal wo Du es anpackst, das musste Du erstmal lösen. Danach wird auch der aus der UI-Datei erzeugte Quelltext laufen. Hoffe ich einfach mal.
E*