ich habe da ein Problem.
Ziel ist es, ein grafisches Objekt - hier EPushButton - im QtDesigner zur Verfügung zu stellen. Dieser EPushButton hat eigene neue Properties. Zusätzlich sollen nicht alle Properties innerhalb des Property-Editors angezeigt werden. z.B. "focusPolicy" soll ausgeblendet werden.
Wie realisiert man so etwas? Bisher habe ich den Weg gewählt, wo ich versuche das PropertySheet mit meinem eigenen zu überlagern und die Properties auszublenden, welche ich nicht benötige. Ist das richtig? Oder gibt es einen einfacheren Weg?
Beim Überlagern des PropertySheets besteht folgendes Problem:
Es gibt eine Bibliothek "egui.lib" wo "EPushButton" mit neuen/eigenen Q_PROPERTYs definiert ist. Diese Bibliothek wird nun innerhalb meines QtDesigner-Plugins verwendet. Damit die Klasse dem QtDesigner zur Verfügung gestellt werden kann, habe ich ein "EPushButtonPlugin" angelegt:
Code: Alles auswählen
class EPushButtonPlugin: public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
EPushButtonPlugin(QObject *parent = 0);
...
};Code: Alles auswählen
class EPushButtonPropertySheet: public QObject, QDesignerPropertySheetExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerPropertySheetExtension)
public:
EPushButtonPropertySheet(EPushButton* p, QObject *parent);
...
AABER: "icon" oder "pixmap" werden zwar ausgelesen (Debugger), im QtDesigner -PropertyEditor aber nicht angezeigt. (Hier öffnet sich ja normalerweise in der Spalte "Value" die Möglichkeit über ein QFileDialog eine Datei auszusuchen)
Nach einigem Stöbern im QtDesigner-Quellcode habe ich folgenden Codekommentar gefunden:
(qdesigner_propertysheet.cpp)
Code: Alles auswählen
/*
Resource properties are those which:
1) are reloadable
2) their state is associated with a file which can be taken from resources
3) we don't store them in Qt meta object system (because designer keeps different data structure for them)
*/
bool QDesignerPropertySheetPrivate::isResourceProperty(int index) const
{
return m_resourceProperties.contains(index);
}
void QDesignerPropertySheetPrivate::addResourceProperty(int index, QVariant::Type type)
{
if (type == QVariant::Pixmap)
m_resourceProperties.insert(index, qVariantFromValue(qdesigner_internal::PropertySheetPixmapValue()));
else if (type == QVariant::Icon)
m_resourceProperties.insert(index, qVariantFromValue(qdesigner_internal::PropertySheetIconValue()));
}Alles etwas verwirrend, spiegelt aber glaube ich auch ganz gut wieder wie es in meinem Kopf gerad ausschaut....
Falls zu verwirrend, bitte einfach Rückfragen...
Grüße