Selbst erstelltes Widget in VS integrieren

Alles rund um die Programmierung mit Qt
Antworten
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

Selbst erstelltes Widget in VS integrieren

Beitrag von taraquedo »

Hallo!

Ich habe es tatsächlich hingekriegt, dass ich mit nmake ein Plugin für Designer übersetzt bekommen habe - analogClock sei dank. Das integriert sich jetzt sehr schön und ich kann es gut benutzen.

Nur verwende ich unter Windows Visual Studio 2005 und wenn ich nun dieses Widget verwende, dann erhalte ich vom Linker noch ein paar undefinierte Symbole. Wahrscheinlich muss ich den Code ja noch durch moc jagen - aber was und wie genau? Habe da schon ein wenig was versucht, habe es aber wohl falsch gemacht. Vorallem habe ich das Plugin ja von Hand mit qmake und nmake übersetzt. Vielleicht läßt sich der Vorgang ja auch automatisieren, so dass sich das Widget neu erstellt, wenn ich es ändere.

Deshalb wollte ich fragen, ob jemand weiss, wo das mal dargestellt wird. Wie ich also ein self-made Widget in VS am besten nutze. Oder läßt sich das mit wenigen Worten erklären?

Grüße!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein bischen genauer bitte - wie erstellst / benutzt du das custom Widget und was meckert der Linker an
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

Beitrag von taraquedo »

Hi!

Ich dachte fragste mal ganz allgemein, vielleicht gibt es ja eine ähnliche Anleitung im Netz, wie es sie für das Einrichten der Entwicklungsumgebung VS gibt.

Ich verwende mal die analogClock aus $(QTDIR)/examples/designer, damit ich nachher nicht in meinem Quellcode einen Fehler gehauen habe. Kann die dann ja später auswechseln. Jedenfalls habe ich die dll für Designer ja schon kreirt. Jetzt verwende ich das auf einem QMainWindow.

Die analogclock.cpp und analogclock.h habe ich im Projekt eingefügt. Dann erhielt ich Linkermeldungen über fehlende Symbole. Also dachte ich mir: Da fehlt sicherlich der moc. In der Umgebung eingefügt, dass die .h zusätzlich durch den Befehl $(QTDIR)\bin\moc.exe "$(InputPath)" -o "$(InputDir)/generated_moc/moc_$(InputName).cpp" laufen muss. Die moc_analogclock.cpp aus dem Unterverzeichnis fügte ich dann ebenfalls zum Projekt hinzu.

Damit gibt es jetzt eine Reihe Fehlermeldungen. Die erste davon lautet:
moc_analogclock.cpp(36) : error C2491: 'AnalogClock::staticMetaObject': Definition von Statisches Datenmember für dllimport nicht zulässig
Davor gibt es noch Warnung zur "Inkonsistente DLL-Bindung". Die angezeigte Stelle lautet in der generierten moc:

Code: Alles auswählen

const QMetaObject AnalogClock::staticMetaObject = {
    { &QWidget::staticMetaObject, qt_meta_stringdata_AnalogClock,
      qt_meta_data_AnalogClock, 0 }
};
Kann damit jemand was anfangen? Das wird wohl irgendwie damit zu tun haben, dass er jetzt statisch binden will und QDESIGNER_WIDGET_EXPORT wahrscheinlich auf dll hinausläuft, oder?

Grüße!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du verwendest das neue Widget also nicht als Plugin sondern willst es direkt integrieren? Dann muss QDESIGNER_WIDGET_EXPORT an dieser Stelle raus.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

Beitrag von taraquedo »

Hallo!

Jaein, eher aus Unwissenheit. Ich wollte es schon schön im Designer benutzen und später in meiner Anwendung einfach nutzen. Aus deiner Antwort höre ich aber raus, dass ich also gegen die dll binden muss? Ich habe das jetzt mal so gemacht und die customwidgetplugin.dll eingebunden- die, aus den examples. Jetzt erhalte ich - trotz ausreichender Zugriffberechtigungen - folgende Meldung:
C:\Programme\Qt4/plugins/designer\customwidgetplugin.dll : fatal error LNK1107: Ungültige oder beschädigte Datei: Lesen bei 0x2B0 nicht möglich.
Was bedeutet das? Warum klappt hier das Lesen erst nach 688 Bytes nicht?

Grüße!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Der Linkerfehler tritt wahrscheinlich auf weil ein obj-File kaputt ist -> alles neu erstellen.
Und wie man es machen muss sieht man (wie Du ja auch gezeigt hast) an dem analogclock-Beispiel. Nimm das nud modifiziere es.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten