[gelöst] connect funktioniert nicht?! QListBox

Alles rund um die Programmierung mit Qt
Antworten
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

[gelöst] connect funktioniert nicht?! QListBox

Beitrag 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
Zuletzt geändert von whit3 am 23. März 2011 10:10, insgesamt 1-mal geändert.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

Beitrag von whit3 »

ok ich hab wohl

Code: Alles auswählen

signals:
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 ...
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

Beitrag von whit3 »

solarix das mit dem MOCen hast du doch gemeint oder???

Sonst keiner eine Idee ? :( :(
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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....?
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

Beitrag 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..
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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?
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

Beitrag 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 :D
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

Beitrag 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?!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
whit3
Beiträge: 42
Registriert: 1. Februar 2010 09:55

Beitrag 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 ^^
Antworten