User defined Widgets im QT-Designer

Alles rund um die Programmierung mit Qt
Antworten
Grimblegrumble
Beiträge: 2
Registriert: 26. März 2012 13:34

User defined Widgets im QT-Designer

Beitrag 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) 1820 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: User defined Widgets im QT-Designer

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Grimblegrumble
Beiträge: 2
Registriert: 26. März 2012 13:34

Re: User defined Widgets im QT-Designer

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: User defined Widgets im QT-Designer

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten