[Gelöst] QtDesignerPropertyEditor - Show/Edit QVariants

Alles rund um die Programmierung mit Qt
Antworten
SamFredericks
Beiträge: 14
Registriert: 19. April 2011 12:44

[Gelöst] QtDesignerPropertyEditor - Show/Edit QVariants

Beitrag von SamFredericks »

Hi,

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);

   ...
};
Zusätzlich habe ich das PropertySheet vom QtDesigner überlagert mit meinem eigenen PropertySheet:

Code: Alles auswählen

class EPushButtonPropertySheet: public QObject, QDesignerPropertySheetExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerPropertySheetExtension)

public:
      EPushButtonPropertySheet(EPushButton* p, QObject *parent);
      ...
Mit Hilfe des PROPERTY - Systems kann man nun bequem alle Properties im EPushButtonPropertySheet auslesen und die anzeigen lassen, welche angezeigt werden sollen.
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()));
}
Wie kann man also jetzt icon-Properties, oder pixmap-Properties mit einem QFileDialog im QtDesigner innerhalb eines eigenen Property-Sheets darstellen?

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
Zuletzt geändert von SamFredericks am 12. Mai 2011 12:24, insgesamt 1-mal geändert.
SamFredericks
Beiträge: 14
Registriert: 19. April 2011 12:44

Beitrag von SamFredericks »

Kann es vielleicht sein, dass QVariant::Icon und QVariant::Pixmap generell überarbeitet wurden, aber der zugehörige PixmapEditor innerhalb von QtDesigner nicht herausgeführt wurde, sowie bei QVariant::Palette und der PaletteEditorButton

http://doc.qt.nokia.com/qq/qq25-designe ... conediting

...vllcht?
SamFredericks
Beiträge: 14
Registriert: 19. April 2011 12:44

Beitrag von SamFredericks »

Ich habe zwar die Antwort auf meine eigentliche Frage:
Wie kann man also jetzt icon-Properties, oder pixmap-Properties mit einem QFileDialog im QtDesigner innerhalb eines eigenen Property-Sheets darstellen?
leider nicht gefunden, allerdings einen Weg, wie man Properties im PropertyEditor im QtDesigner ein und ausblenden kann.
Einfach im CustomWidget vom CustomWidgetPlugin die Darstellung ausschalten:

Code: Alles auswählen

class QDESIGNER_WIDGET_EXPORT CustomWidget : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(QString objectName READ objectName DESIGNABLE false );
    Q_PROPERTY(bool enabled READ isEnabled DESIGNABLE false );

...
Ganz schö dämlisch... :wink:
SamFredericks
Beiträge: 14
Registriert: 19. April 2011 12:44

Beitrag von SamFredericks »

Wie kann man also jetzt icon-Properties, oder pixmap-Properties mit einem QFileDialog im QtDesigner innerhalb eines eigenen Property-Sheets darstellen?
Leider ist es nicht möglich spezielle QVariant-Typen im PropertyEditor von QtDesigner zu editieren/darzustellen. :cry:
Insbesondere, wenn man seinem CustomWidget ein neues Property mit einem neuen MetaType erstellt, kann dieses im QtDesignerPropertyEditor nicht editiert/dargestellt werden. Es gibt bisher kein Interface um den QtDesignerPropertyEditor um den jeweiligen QVariant-Typen zu erweitern.

Falls euch dieses Thema dennoch interessiert, könnt ihr für eine Erweiterung des QtDesigners stimmen:

http://bugreports.qt.nokia.com/browse/QTBUG-2074
Antworten