Seite 1 von 1

[gelöst] Verständnisproblem SIGNAL / SLOT

Verfasst: 2. August 2005 15:53
von stippy
Hallo zusammen,

ich möchte einen Syntax Higlighter mit Hilfe eines Parsers (lex) schreiben.
Dafür habe ich eine eigene Klasse von QSyntaxhighlighter abgeleitet. Dort erzeuge ich einen process, dem ich komischerweise nicht den Syntaxhigligher als Vater zuweisen kann.

Leider kann ich das processExited SIGNAL nicht abfangen:
Es kommt:

Code: Alles auswählen

syntaxhighlighter.cpp:13: error: no matching function for call to `QObject::connect(QProcess*&, const char[17], SyntaxHighlighter* const, const char[18])'
/usr/lib/qt3//include/qobject.h:116: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*)
/usr/lib/qt3//include/qobject.h:227: note:                 bool QObject::connect(const QObject*, const char*, const char*) const
Ist das so, weil QSyntaxhighlighter nicht von QObject abgeleitet ist? Wie kann ich das lösen?

Verfasst: 2. August 2005 16:04
von FlorianBecker
Nicht Objecte können nicht mit Signalen und Slots belegt werden. Du könntest das Problem theoretisch lösen, wenn du deiner abgeleiteten Klasse auch ein Object zuweißt.

Verfasst: 2. August 2005 16:09
von stippy
Du könntest das Problem theoretisch lösen, wenn du deiner abgeleiteten Klasse auch ein Object zuweißt.
Das ist mir nicht klar! Was meinste damit?

Verfasst: 2. August 2005 16:12
von FlorianBecker
Das ist mir klar, was meinst du damit!?

Also ist es dir doch nicht klar.

Eine Klasse ohne public Object und Q_OBJECT Makro kann keine Signal und Slots benutzen.

Also class DeineKlasse : public QObject {

Q_OBJECT
}

eben für mehrere Klassen aus denen du erben willst machst einfach Mehrfachvererbungen, wie es in Qt4 ja üblich wurde.

Verfasst: 2. August 2005 16:31
von stippy
:-) Hab doch geschrieben das mir das nicht klar ist! :-)

Hmm, aber ich kriegs net hin.

Im Header hab ich jetzt:

Code: Alles auswählen

class SyntaxHighlighter : public QSyntaxHighlighter, public QObject {

        Q_OBJECT
Im CPP-File

Code: Alles auswählen

SyntaxHighlighter::SyntaxHighlighter( QTextEdit * textedit ) : QSyntaxHighlighter( textedit ), QObject() {
und der Compiler meckert:

Code: Alles auswählen

g++  -o qedit about.o main.o mainwindow.o syntaxhighlighter.o aboutbase.o qmake_image_collection.o moc_about.o moc_mainwindow.o moc_aboutbase.o   -L/usr/lib/qt3//lib64 -L/usr/X11R6/lib64 -lqt-mt -lXext -lX11 -lm
syntaxhighlighter.o(.text+0x27): In function `SyntaxHighlighter::SyntaxHighlighter(QTextEdit*)':
: undefined reference to `vtable for SyntaxHighlighter'
syntaxhighlighter.o(.text+0x2f): In function `SyntaxHighlighter::SyntaxHighlighter(QTextEdit*)':
: undefined reference to `vtable for SyntaxHighlighter'
syntaxhighlighter.o(.text+0x87): In function `SyntaxHighlighter::SyntaxHighlighter(QTextEdit*)':
: undefined reference to `vtable for SyntaxHighlighter'
syntaxhighlighter.o(.text+0x8f): In function `SyntaxHighlighter::SyntaxHighlighter(QTextEdit*)':
: undefined reference to `vtable for SyntaxHighlighter'
collect2: ld returned 1 exit status
make: *** [qedit] Fehler 1

Verfasst: 2. August 2005 16:33
von FlorianBecker
Das moc wurde nicht erstellt!

Verfasst: 2. August 2005 16:41
von stippy
Nachdem ich das Makefile neu erzeugt hab gehts.
Allerdings muß zuerst von QObject abgeleitet werden. Also genau anders herum wie in meinem Code.

Danke erst mal.