将自定义类型的 QVariant 转换为 QString
我有一个名为 Money 的自定义类,我已使用 Q_DECLARE_METATYPE() 声明了该类。
class Money {
public:
Money(double d) {
_value = d;
}
~Money() {}
QString toString() const {
return QString(_value);
}
private:
double _value;
};
Q_DECLARE_METATYPE(Money);
Money m(23.32);
我将其存储在 QVariant 中,并且想将其转换为 QString:
QVariant v = QVariant::fromValue(m);
QString s = v.toString();
变量 s 最终成为空字符串,因为 QVariant 不知道如何将我的自定义类型转换为字符串。 有什么办法可以做到这一点吗?
I have a custom class called Money that I have declared with Q_DECLARE_METATYPE().
class Money {
public:
Money(double d) {
_value = d;
}
~Money() {}
QString toString() const {
return QString(_value);
}
private:
double _value;
};
Q_DECLARE_METATYPE(Money);
Money m(23.32);
I store that in a QVariant and I want to convert it to a QString:
QVariant v = QVariant::fromValue(m);
QString s = v.toString();
Variable s ends up being a null string because QVariant doesn't know how to convert my custom type to the string. Is there any way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧,我找到了一种方法来做到这一点。
我创建了一个名为 CustomType 的父类型,其中包含一个虚拟方法,我可以实现该方法以将自定义类型转换为“正常”QVariant:
然后我从中继承了自定义 Money 类。
这允许我传递 QVariants 中包含的自定义 Money 变量,以便我可以在 Qt 属性系统、模型/视图框架或 sql 模块中使用它们。
但是,如果我需要将自定义 Money 变量存储在数据库中(使用 QSqlQuery.addBindValue),它不能是自定义类,它必须是已知类型(如 double)。
myNewVariant 现在具有 double 类型,而不是 Money 类型,因此我可以在数据库中使用它:
或将其转换为字符串:
Ok I found one way to do this.
I created a parent type called CustomType with a virtual method that I can implement to convert my custom type to a "normal" QVariant:
I then inherited my custom Money class from this.
This allows me to pass my custom Money variables contained in QVariants so I can use them in the Qt property system, model/view framework, or the sql module.
But if i need to store my custom Money variable in the database (using QSqlQuery.addBindValue) it can't be a custom class, it has to be a known type (like double).
myNewVariant now has the type of double, not Money so I can use it in a database:
or convert it to a string:
您确定以下内容有效吗?
我似乎没有找到需要
double
的QString
ctor。 您必须自己在此处进行转换。 Qt 的方法是:Are you sure the following works?
I don't seem to find a
QString
ctor that takes adouble
. You will have to do the conversion here yourself. The Qt way is to:如果你这样尝试会发生什么?
What happens if you try it this way?