Problem mit custom widgets

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Problem mit custom widgets

Beitrag von Muckl »

Hallo,
habe mir ein eigenes analoges Instrument erstellt. Das kompelieren und öffnen in einem Fenster funktioniert. Habe dann ein plugin für den designer erstellt, welches er auch erfolgreich einlesen konnte. Nun versuche ich dieses Instrumen in einem Mainwindow zum laufen zu bekommen. Erste fehlermeldung war, dass er die .h Datei des Instruments nciht finden konnte. Füge ich die Datei zu meinem Projekt hinzu war die Meldung weg. Meine Frage ist, ob ich normalerweise die .h Datei überhaupt benötige. Habe doch extra ein Plugin für den Designer erstellt? Nachdem ich nun die .h Datei hinzugefügt habe, kommt die Fehlermeldung: error C2061: syntax error: identifier 'DeltaWindDirection'. DeltaWindDirection ist die Klasse meines Instruments. Ich muss dazu sagen, dass ich es mit dem QT AddIn und VS08 mache. In der ui_project.h versucht er ein neues Object von DeltaWindDirection auf dem Heap zu erzeugen. Hier mal die Stelle zu der mich die Fehlermeldung bringt.

Code: Alles auswählen

 centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        DeltaWindDirection = new DeltaWindDirection(centralWidget);
        DeltaWindDirection->setObjectName(QString::fromUtf8("DeltaWindDirection"));
Hat jemand einen Plan was da schief läuft?

gruß,
Muckl
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn man eine Klasse benutzt muss man auch den zughörigen Header einbinden. Zwar nicht direkt zum Projekt aber egal.
Der Rest... naja ein wenig C++ würde ich sagen :)

Code: Alles auswählen

DeltaWindDirection = new DeltaWindDirection(centralWidget); 
Das ist definitiv kein C++

-> C++ Grundlagen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

Also ich hab mich noch nie mit erstellen von Plugins für den Designer beschäftigt, aber ein paar Dinge weiß man ja trotzdem.

1. Wenn du das Plugin erstellst, erstellst du eine Bibliothek (bei Windows zum Beispiel eine DLL), dass der Code aus dem Programm augelagert ist und dort nicht mehr mit kompiliert werden muss. Deswegen muss der Kompiler aber trotzdem wissen, welche Funktionen es in der DLL gibt und dafür musst du die Header-Datei einbinden.

2. @Christian: Das ist der vom Designer erstellte Code, die Variable ist bestimmt vorher als Zeiger deklariert worden.

3. Schaue bitte nochmal die Doku durch, wie genau man Plugins in den Designer einbindet, da sollte dann auch irgendwo stehen, wie man die Header richtig einbindet...

Mfg androphinx
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Beitrag von Muckl »

hi,
also, der kram kommt ja nciht von mir, das macht VS08 selber. Aus der .ui datei erstellt er eine ui_Dateiname.h und in der steht der kram drin, den ich geposted habe. Problem ist, dass er jedes mal, wenn ich kompeliere aus der .ui eine ui-Dateiname.h erstellt. Die Header also umzuschreiben bringt ncihts, da er sie beim nächsten Kompelieren eh wieder neu erstellt.
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

Deswegen sollst du ja schauen, wie man Plugins richtig in den Designer einbindet:

http://doc.qt.nokia.com/4.7/designer-cr ... dgets.html

Mfg androphinx
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Beitrag von Muckl »

Hi, ja sorry, hatten wohl zur selben Zeit geantwortet. Werde ich jetzt nochmal gucken.
Die Variable ist vorher schon deklariert. Finde komsich, dass die Variable die selbe Bezeichnung erhält, wie auch die Klasse hat. Vielelicht verwirrt dass den Compiler. Werde mal gucken ob ich beim erstellen des PlugIn irgentwo die Bezeichnungen vertauscht habe oder so.
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Beitrag von Muckl »

ein Problem war, dass Variable und KLasse den gleichen Namen hatten. Nun erhalte ich zwei neue fehlermeldungen, mit denen ich nicht viel anfangen kann:
Error 1 error LNK2019: unresolved external symbol "public: __thiscall DeltaWindDirection::DeltaWindDirection(class QWidget *)" (??0DeltaWindDirection@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_TextinstrumenClass::setupUi(class QMainWindow *)" (?setupUi@Ui_TextinstrumenClass@@QAEXPAVQMainWindow@@@Z) textinstrumen.obj


Error 2 fatal error LNK1120: 1 unresolved externals C:\Dokumente und Einstellungen\acuser3\Eigene Dateien\Visual Studio 2008\Projects\Text instrumen\Release\Text instrumen.exe

die Docu habe ich durch und kann nichts finden, was falsch sein könnte.
Antworten