Seite 1 von 1

User defined Widgets im QT-Designer

Verfasst: 27. März 2012 15:43
von Grimblegrumble
Hallo ich versuche ein selbst designedes Widget im QT-Designer in der Widget Box zu integrieren.
So soll es aussehen (alles innerhalb des roten rechtecks):
[img]
FolderViewer_Widget.JPG
FolderViewer_Widget.JPG (12.1 KiB) 1818 mal betrachtet
[/img]

Ich verwende Visual Studio 2010 mit der Qt-Integration.
Da bekommt man mit rechts click auf die Solution -> Add -> New Projekt ->QT4 Designer Plugin
schon fast alles erstellt was man brauch.
Da wird alles erstellt was im Kapitel "Benutzerdefinierte Widgets erstellen" aus dem QT-Buch beschrieben steht.

Genauer gesagt wurden 4 Files erstellt:
  • folderviewer.h
    folderviewer.cpp
    folderviewerplugin.h
    folderviewerplugin.cpp
Da kein ui-File automatisch erstellt wurde habe ich mit rechts click auf das QT4 Designer Plugin Projekt -> Add -> New Item -> Qt Widget Form
ein ui-File erstellt mit dem Namen "FolderViewer.ui", das im Bild "FolderViewer_Widget.JPG" visualisiert wird.

Dann dachte ich: jetzt muss nur noch die folderviewer.h Klasse vom ui-File abgelitten werden.
Also habe ich folgende änderung vorgenommen:

#include <QtGui/QWidget>
#include "ui_FolderViewer.h"

class FolderViewer : public QWidget, Ui::FolderViewer
{
Q_OBJECT

public:
FolderViewer(QWidget *parent = 0);
~FolderViewer();

};


Das Projekt lässt sich jetzt auch wunderbar compilieren. Das Resultat ist eine dll und eine lib.
Diese Files habe ich jeweils in das Verzeichniss kopiert:
P:\QT\Desktop\Qt\4.7.4\msvc2005\plugins\designer\FolderViewer.dll
P:\QT\Desktop\Qt\4.7.4\msvc2005\plugins\designer\FolderViewer.lib

und in das Qt\bin Verzeichniss jeweils nochmal die dll
und in das Qt\lib Verzeichniss noch die lib.

Jetzt wird mir der FolderViewer auch im QT-Designer in der Widget Box angezeigt, aber sobald ich den auf die Oberfläche einer QtMainApplication drage erscheint nur ein leeres Rechteck.
Und wenn ich dann das compiliere und auf Members des FolderViewer-Widgets zugreifen will bekomme ich einen haufen compiler errors.
folderviewer.h(5): fatal error C1083: Cannot open include file: 'ui_FolderViewer.h': No such file or directory

Sieht jemand was ich falsch mache?
Mir ist auch nicht so ganz klar wie das ist mit dem Plugin? Das sollte doch so etwas sein wie eine Factory für das User defined Widget FolderViewer, oder?

Gruss
Daniel

Re: User defined Widgets im QT-Designer

Verfasst: 27. März 2012 17:55
von Christian81
Bei Widgetes die in Libraries verwendet werden sollen ist der Ansatz mit Multiple Inheritance definiv nicht der richtige Weg da man so die erzeugten Dateien mit ausliefern müsste wie Du siehst.
Deshalb: ui als Member-Pointer und Vorwärtsdeklaration.

Re: User defined Widgets im QT-Designer

Verfasst: 28. März 2012 13:14
von Grimblegrumble
Wenn ich den Member Pointer nehme bekomme ich Linker Fehler anstatt Compiler Fehler.

Ich tu einfach im Qt-Designer mein eigenes Widget (FolderViewer) auf meine QMainApplication (bei mir "qt_mainClass", aus einem anderen Projekt) draggen. Wie gesagt ich sehe da schon nur ein leeres Rechteck ich glaube da ist schon was faul.

2> Generating Code...
2>qt_mainView.obj : error LNK2019: unresolved external symbol "public: __thiscall FolderViewer::FolderViewer(class QWidget *)" (??0FolderViewer@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_qt_mainClass::setupUi(class QMainWindow *)" (?setupUi@Ui_qt_mainClass@@QAEXPAVQMainWindow@@@Z)
2>P:\qt_test\qt_main\Release\qt_main.exe : fatal error LNK1120: 1 unresolved externals

Gruss
Daniel

Re: User defined Widgets im QT-Designer

Verfasst: 28. März 2012 17:41
von Christian81