Seite 1 von 1
Selbst erstelltes Widget in VS integrieren
Verfasst: 2. März 2007 12:09
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!
Verfasst: 2. März 2007 13:38
von Christian81
Ein bischen genauer bitte - wie erstellst / benutzt du das custom Widget und was meckert der Linker an
Verfasst: 3. März 2007 13:28
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!
Verfasst: 3. März 2007 15:54
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.
Verfasst: 4. März 2007 20:31
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!
Verfasst: 5. März 2007 06:59
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.