Seite 1 von 1
[gelöst] connect funktioniert nicht?! QListBox
Verfasst: 22. März 2011 09:09
von whit3
Header:
Code: Alles auswählen
#include <qlistbox.h>
class AutoCompletion : public QListBox
{
public:
AutoCompletion(QWidget * parent);
void showEvent(QShowEvent *e);
public slots:
void slot_paste2editor(QListBoxItem *item);
};
Source:
Code: Alles auswählen
#include "autocompletion.h"
#include <qmessagebox.h>
AutoCompletion::AutoCompletion(QWidget * parent) : QListBox(parent)
{
hide();
setFrameStyle(QFrame::Box | QFrame::Plain);
}
void AutoCompletion::showEvent(QShowEvent *e)
{
connect(this,SIGNAL(clicked(QListBoxItem *)),this,SLOT(slot_paste2editor(QListBoxItem *)));
}
void AutoCompletion::slot_paste2editor(QListBoxItem *item)
{
QMessageBox::information(this,"",item->text());
}
Zuerst hab ich den Connect direkt im Konstruktor aufgerufen, aber auch das funktionierte nicht...
Kein CompilerError - jedoch auch keine MessageBox
Verfasst: 22. März 2011 09:17
von solarix
Was steht denn hier in der Doku gleich nach dem C++-Beispielcode?
http://doc.qt.nokia.com/4.7/signalsands ... ll-example
hth..
Verfasst: 22. März 2011 09:49
von whit3
ok ich hab wohl
vergessen.
hab das ganze jetzt unmodeliert, was auch sinnvoller ist, aber es funktioniert trotzdem nicht.
Header CodeEditor:
Code: Alles auswählen
#include <qtextedit.h>
#include <qmessagebox.h>
#include "autocompletion.h"
class CodeEditor : public QTextEdit
{
Q_OBJECT
public:
CodeEditor(QWidget *parent = 0);
private:
AutoCompletion *completion;
public slots:
void slot_test();
};
Im Konstruktor von CodeEditor rufe ich dann dieses connect auf:
Code: Alles auswählen
completion = new AutoCompletion(this);
connect(completion,SIGNAL(clicked(QListBoxItem *)),this,SLOT(slot_test()));
Header AutoCompletion:
Code: Alles auswählen
#include <qlistbox.h>
class AutoCompletion : public QListBox
{
Q_OBJECT
public:
AutoCompletion(QWidget * parent);
signals:
void clicked(QListBoxItem *item);
};
geMOCT habe ich übrigens die beiden Klassen auch ...
Verfasst: 22. März 2011 11:14
von whit3
solarix das mit dem MOCen hast du doch gemeint oder???
Sonst keiner eine Idee ?

Verfasst: 22. März 2011 11:22
von solarix
Vergessen hast du "Q_OBJECT".. das Signal brauchst du nicht zu deklarieren, denn das erbst du ja von der QListBox.
Ich habe Qt3 nicht mehr kennengelernt, aber ich vermute, dass auch da in der Debug-Variante bei fehlgeschlagenen connects eine entsprechende Fehler-Meldung auf der Konsole ausgegeben wird....?
Verfasst: 22. März 2011 11:27
von whit3
solarix hat geschrieben:Vergessen hast du "Q_OBJECT".. das Signal brauchst du nicht zu deklarieren, denn das erbst du ja von der QListBox.
Ich habe Qt3 nicht mehr kennengelernt, aber ich vermute, dass auch da in der Debug-Variante bei fehlgeschlagenen connects eine entsprechende Fehler-Meldung auf der Konsole ausgegeben wird....?
Wo habe ich das Q_OBJECT vergessen?!
Hab es doch in beiden Klassen angegeben... Im ersten Beitrag ja, aber jetzt ist es doch drin?!
Der Connect schlägt ja nicht fehl.. das ist ja das dumme.
Es passiert einfach nichts wenn ich ein Item anklicke..
Verfasst: 22. März 2011 11:36
von solarix
whit3 hat geschrieben:
Wo habe ich das Q_OBJECT vergessen?! ... aber jetzt ist es doch drin?!
Ja.. eben.. Jetzt ist es soweit ok (ausser, dass das Signal nicht deklariert werden muss (darf?).
whit3 hat geschrieben:
Der Connect schlägt ja nicht fehl.. das ist ja das dumme..
Und wie/wo kontrollierst du das?
Verfasst: 22. März 2011 11:54
von whit3
solarix hat geschrieben:whit3 hat geschrieben:
Wo habe ich das Q_OBJECT vergessen?! ... aber jetzt ist es doch drin?!
Ja.. eben.. Jetzt ist es soweit ok (ausser, dass das Signal nicht deklariert werden muss (darf?).
Und genau da liegt der Fehler, danke!
Man darf es nicht deklarieren, wird dann anscheinend überschrieben.
Und daher hat auch der Compiler nicht gemeckert...
Vielen Dank nochmal

Verfasst: 22. März 2011 11:58
von franzf
whit3 hat geschrieben:Und daher hat auch der Compiler nicht gemeckert...
Nur zur Info: connect() wirft keinen Fehler beim Kompilieren, wenn SIGNALS oder SLOTS nicht existieren. connect wird erst zur Laufzeit ausgeführt. Wenn es dort also Fehler gibt, wird eine passende Meldung auf die console ausgegeben.
Verfasst: 22. März 2011 13:20
von whit3
franzf hat geschrieben:whit3 hat geschrieben:Und daher hat auch der Compiler nicht gemeckert...
Nur zur Info: connect() wirft keinen Fehler beim Kompilieren, wenn SIGNALS oder SLOTS nicht existieren. connect wird erst zur Laufzeit ausgeführt. Wenn es dort also Fehler gibt, wird eine passende Meldung auf die console ausgegeben.
Danke für die Info - und wie kann ich Meldungen der console sehen?!
Verfasst: 23. März 2011 10:58
von franzf
whit3 hat geschrieben:und wie kann ich Meldungen der console sehen?!
Hast du nie Konsolenprogramme geschrieben, also C++ ohne Gui?
Indem du dein Programm auf einer console (xterm, cmd.exe, ...) startest, vllt. kann deine IDE auch die Programmausgaben anzeigen.
Unter Windows braucht es da AFAIK ein "CONFIG += console" in der .pro.
Verfasst: 24. März 2011 11:03
von whit3
franzf hat geschrieben:whit3 hat geschrieben:und wie kann ich Meldungen der console sehen?!
Hast du nie Konsolenprogramme geschrieben, also C++ ohne Gui?
Indem du dein Programm auf einer console (xterm, cmd.exe, ...) startest, vllt. kann deine IDE auch die Programmausgaben anzeigen.
Unter Windows braucht es da AFAIK ein "CONFIG += console" in der .pro.
doch natürlich .. dachte du meinst eine QT interne console ^^