2016-07-14 8 views
3

Ich möchte auf meiner GUI unter Verwendung von QML und C++ einen Multi-Datentyp-Wert vom Typ template < typename T> anzeigen. Ist es möglich, es mit Q_PROPERTY zu verwenden, oder soll ich für jeden Datentyp Funktionsüberladung verwenden und es an Q_PROPERTY übergeben?Können wir Q_PROPERTY mit Vorlage <typename T> verwenden?

Zum Beispiel:

Q_PROPERTY(int dataread READ dataRead NOTIFY dataChanged) 
Q_PROPERTY(float dataread READ dataRead NOTIFY dataChanged) 
int dataRead (int data) {return data; } 
float dataRead (float data) {return data; } 

Antwort

2

Nein, können Sie nicht mit Eigenschaften verwenden Vorlagen, wie moc doesnt Unterstützung Templat. Dies wurde diskutiert (und ist machbar), aber es gab nicht genug Interesse, es umzusetzen.

Jede Eigenschaft identifiziert auch einen konkreten Typ, so dass Sie ihn auch nicht überladen können. Sie können Überlastung Signale und Slots, so ist dies machbar:

class foo : public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(int intRead READ readInt NOTIFY dataChanged) 
    Q_PROPERTY(float floatRead READ readFloat NOTIFY dataChanged) 

public: 
    int readInt() {return data; } 
    float readFloat() {return data; } 
signals: 
    void dataChanged(int data); 
    void dataChanged(float data); 
... 
} 

Bitte beachte, dass ich die Parameter aus dem Lesefunktionen entfernt.

+0

Das 'dataRead' macht keinen Sinn, Sie können die Rückgabetypen nicht überladen. Ich würde auch vermeiden, Signale zu überlasten, da Sie Probleme mit der PMF-Verbindungssyntax haben werden. – peppe

+0

@peppe Guter Fang, danke. –

Verwandte Themen