Seite 1 von 1
[gelöst] SLOT Problem
Verfasst: 11. Juli 2007 10:58
von CSchirner
Hätte nie gedacht das ich jemals schwierigkeiten mit den SIGNAL/SLOT konzept habe,,,, aber irgendwie haut was nicht hin, wie ich es gerne haben würde
aaalso..
ich habe eine Klasse ausgang, die public von QLabel erbt
class Ausgang : public QLabel
diese beinhaltet Slots..
private slots:
void slotRename(void);
Jetzt habe ich Im Konstruktor:
Ausgang::Ausgang(const QString &text, QWidget *parent) : QLabel(text, parent)
folgendes gemacht:
connect(objAction, SIGNAL(triggered()), this, SLOT(slotRename()));
Im Ausgabefenster des Compilers steht:
Object::connect: No such slot QLabel::slotRename()
Die Frage ist jetzt... warum sucht der den Slot im "QLabel"? Dort gibts sicher keinen :/
Hat jemand zufällig ne antwort... hab auch schonmal verzweifelterweise versucht den this pointer zu (Ausgang*) zu casten
Vielen Dank schonmal für eure Antworten
MFG
Christopher Schirner
Verfasst: 11. Juli 2007 11:41
von Volker
Hast Du ein Q_OBJECT in deiner Klassendeklaration?
Verfasst: 11. Juli 2007 11:43
von NoobSaibot
hast du das Q_OBJECT Makro eingebunden?
Verfasst: 11. Juli 2007 12:02
von CSchirner
muss ich das in meiner vererbten klassse auch mit reinpacken?
Sobald ich das mit reinpack...
d:\Cpp\Ausgang.h(9): error C2504: 'QLabel': Basisklasse undefiniert
d:\Cpp\Ausgang.h(13): error C2143: Syntaxfehler: Es fehlt ';' vor 'public'
d:\Cpp\Ausgang.h(13): error C2501: 'Ausgang::Q_OBJECT': Fehlende Speicherklasse oder Typspezifizierer
d:\Cpp\Ausgang.h(14): error C2226: Syntaxfehler: Typ 'Ausgang' nicht erwartet
d:\Cpp\Ausgang.h(14): error C2238: Unerwartete(s) Token vor ';'
d:\Cpp\Ausgang.h(21): error C2061: Syntaxfehler: Bezeichner 'QMouseEvent'
d:\Cpp\Ausgang.h(24): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'labelText'
d:\Cpp\Ausgang.h(24): error C2501: 'Ausgang::QString': Fehlende Speicherklasse oder Typspezifizierer
d:\Cpp\Ausgang.h(24): error C2501: 'Ausgang::labelText': Fehlende Speicherklasse oder Typspezifizierer
d:\Cpp\Ausgang.h(25): error C2143: Syntaxfehler: Es fehlt ';' vor '*'
d:\Cpp\Ausgang.h(25): error C2501: 'Ausgang::QMenu': Fehlende Speicherklasse oder Typspezifizierer
d:\Cpp\Ausgang.h(25): error C2501: 'Ausgang::pContextMenu': Fehlende Speicherklasse oder Typspezifizierer
d:\Cpp\Ausgang.h(28): error C2146: Syntaxfehler: Fehlendes ':' vor Bezeichner 'slots'
d:\Cpp\Ausgang.h(29): error C2062: 'void'-Typ unerwartet
d:\Cpp\Ausgang.h(29): error C2238: Unerwartete(s) Token vor ';'
d:\Cpp\GeneratedFiles\Debug\moc_Ausgang.cpp(12): fatal error C1189: #Fehler: "The header file 'Ausgang.h' doesn't include <QObject>."

Verfasst: 11. Juli 2007 12:04
von Volker
Ja das musst Du mit reinpacken wenn Du in Deiner Klasse signale oder slots verwenden willst.
Du hast aber schon ein #include <Qt/qlabel.h> bei Dir in der Header Datei oder?
Allgemein sagen die Compilerfehlermeldungen nur, dass Du einen Syntaxfehler drin hast, evtl. aber auch nur aufgrund einer unbekannten Klassendeklaration. Ohne Code lässt sich das aber nur schwer sagen.
Verfasst: 11. Juli 2007 12:13
von CSchirner
#include <QLabel> hab ich in der headerdatei...
Verfasst: 11. Juli 2007 12:14
von Volker
dann kann ich dir ohne deine Header Datei gesehen zu haben nicht weiterhelfen
Verfasst: 11. Juli 2007 12:20
von CSchirner
#ifndef AUSGANG_H
#define AUSGANG_H
class Ausgang : public QLabel
{
Q_OBJECT
public:
Ausgang(const QString &text, QWidget *parent);
~Ausgang(void);
void setOutput(unsigned int unOutput);
unsigned int getOutput(void);
protected:
void mousePressEvent(QMouseEvent *event);
private:
QString labelText;
QMenu *pContextMenu;
unsigned int unOutput;
private slots:
void slotRename(void);
void slotDelete(void);
void slotChange(void);
};
#endif
das wäre die HeaderDatei von "Ausgang"
Verfasst: 11. Juli 2007 12:22
von upsala
#include <QLabel> hab ich in der headerdatei...
Wo?
Verfasst: 11. Juli 2007 12:32
von CSchirner
#include <QFileDialog>
//#include <QtGui>
#include <QString>
#include <QtGui/QMainWindow>
#include <QDrag>
#include <QList>
#include <QMimeData>
#include <QLabel>
#include <QtGui>
#include <vector>
#include <QMessageBox>
#include <QtXml/QDomDocument>
#include <QtXml/QDomElement>
#include <QtXml/QDomNode>
using namespace std;
//#include <QtGui/QApplication>
#include "defines.h"
#include "TempSensor.h"
#include "Ausgang.h"
#include "DragTab.h"
Da in der main.h

Verfasst: 11. Juli 2007 12:38
von NoobSaibot
das muß in deiner ausgang.h stehen und nicht da, wo du die ausgang.h inkludierst.
Verfasst: 11. Juli 2007 12:38
von Volker
Und woher soll der Compiler das in der Ausgang.h wissen?
Verfasst: 11. Juli 2007 12:46
von CSchirner
Okay sorry... *müde*
Aber wenn ichs dann einbind in der headerdatei...
VaritecDesigner error LNK2019: Nicht aufgelöstes externes Symbol '"private: void __thiscall Ausgang::slotChange(void)" (?slotChange@Ausgang@@AAEXXZ)', verwiesen in Funktion '"public: virtual int __thiscall Ausgang::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Ausgang@@UAEHW4Call@QMetaObject@@HPAPAX@Z)'
VaritecDesigner error LNK2019: Nicht aufgelöstes externes Symbol '"private: void __thiscall Ausgang::slotDelete(void)" (?slotDelete@Ausgang@@AAEXXZ)', verwiesen in Funktion '"public: virtual int __thiscall Ausgang::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Ausgang@@UAEHW4Call@QMetaObject@@HPAPAX@Z)'
VaritecDesigner fatal error LNK1120: 2 unaufgelöste externe Verweise

Verfasst: 11. Juli 2007 12:47
von NoobSaibot
du mußt den SLOT auch *implementieren*.
Verfasst: 11. Juli 2007 12:51
von CSchirner
Vielen Dank für eure mühe... jetzt klappts...
Ich sollte mir das mit meinen includes nummal anschauen...
vielen vielen dank