QVariant suche genaue Beschreibung
QVariant suche genaue Beschreibung
Hallo!
Gibt es eine umfassende Beschreibung von der Funktionsweise von QVariant?
Danke im Voraus!
The User
Gibt es eine umfassende Beschreibung von der Funktionsweise von QVariant?
Danke im Voraus!
The User
-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
http://doc.qtsoftware.com/4.5/qvariant.html#canConvertThe User hat geschrieben:Also dort steht nicht viel.
Mit Source und QMetaType versteht man zumindest die Speicherung.
Interessant wäre, wie die Konvertierungen vorgenommen werden.
http://doc.qtsoftware.com/4.5/qvariant.html#convert
http://doc.qtsoftware.com/4.5/qvariant.html#value
da stehen doch sogar beispielcodes.
mfg,
julian
Funktionsweise wäre für mich "Es existiert ein void-Pointer, in dem die Daten abgespeichert werden" oder der gleichen.The User hat geschrieben:Funktionsweise != Benutzung
Es geht mir darum, ob man eigene Typen in QVariant konvertierbar machen kann.
Eigene Typen registrieren gehört zur Benutzung.
Aber egal. QMetaType suchst du.
Schau dir die Doku zu Q_DECLARE_METATYPE an, da ist sogar ein ausführliches Beispiel dabei
Lassen wir das einfach gut sein...
Ich habe einiges an Quellcode geschrieben und es geht jetzt auf anderm Wege.
Die Doku gibt nun einmal wenig Information über das Speicherformat von QVariant u.ä., natürlich habe ich die gelesen, ebenso wie die von QMetaType. Mit dem Quellcode bin ich dahinter gekommen, dass es wohl unmöglich ist.
Ich habe einiges an Quellcode geschrieben und es geht jetzt auf anderm Wege.
Die Doku gibt nun einmal wenig Information über das Speicherformat von QVariant u.ä., natürlich habe ich die gelesen, ebenso wie die von QMetaType. Mit dem Quellcode bin ich dahinter gekommen, dass es wohl unmöglich ist.
Ja, das ist unmöglich. Weil canConvert per Default (und das ist bei nicht-Qt-Standard-Typen so) ein false zurück gibt.
Du hast jetzt z.B. die Möglichkeit, dir eigene Operatoren zu definieren, mit denen du deinen Typ dann in einen anderen Typen casten kannst.
Z.B. hast du einen Typ "Angle"
So sparst du dir Methoden ala "toDouble()" oder "toString", auch wenn es eigentlich wurscht ist.
Aber wenn du nix gegen implizite Typkonvertierung hast (a1+10.0) ist es sogar recht praktisch...
Du hast jetzt z.B. die Möglichkeit, dir eigene Operatoren zu definieren, mit denen du deinen Typ dann in einen anderen Typen casten kannst.
Z.B. hast du einen Typ "Angle"
Code: Alles auswählen
#include <iostream>
#include <sstream>
#include <string>
class Angle
{
public:
Angle(int deg=0, int min=0, int sec=0)
: m_deg(deg), m_min(min), m_sec(sec)
{
}
operator double() const
{
return m_deg*1.0 + m_min/60.0 + m_sec/3600.0;
}
operator std::string() const
{
std::stringstream s;
s << m_deg << "° " << m_min << "\'" << m_sec << "\"";
return s.str();
}
protected:
int m_deg, m_min, m_sec;
};
int main()
{
Angle a1(20, 15, 23);
std::cout << static_cast<std::string>(a1) << std::endl;
std::cout << static_cast<double>(a1) << std::endl;
double da1 = a1 + 10.0;
std::cout << da1 << std::endl;
return 0;
}
Aber wenn du nix gegen implizite Typkonvertierung hast (a1+10.0) ist es sogar recht praktisch...