[gelöst] Verständnisproblem SIGNAL / SLOT

Alles rund um die Programmierung mit Qt
Antworten
stippy
Beiträge: 80
Registriert: 29. Juli 2005 09:38
Wohnort: Mönchengladbach

[gelöst] Verständnisproblem SIGNAL / SLOT

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
stippy
Beiträge: 80
Registriert: 29. Juli 2005 09:38
Wohnort: Mönchengladbach

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
stippy
Beiträge: 80
Registriert: 29. Juli 2005 09:38
Wohnort: Mönchengladbach

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das moc wurde nicht erstellt!
stippy
Beiträge: 80
Registriert: 29. Juli 2005 09:38
Wohnort: Mönchengladbach

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