我有一个名为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);
Run Code Online (Sandbox Code Playgroud)
我将它存储在QVariant中,我想将其转换为QString:
QVariant v = QVariant::fromValue(m);
QString s = v.toString();
Run Code Online (Sandbox Code Playgroud)
变量s最终成为空字符串,因为QVariant不知道如何将我的自定义类型转换为字符串.有没有办法做到这一点?
好吧,我找到了一种方法来做到这一点。我使用虚拟方法创建了一个名为 CustomType 的父类型,我可以实现该虚拟方法以将自定义类型转换为“正常”QVariant:
class CustomType {
public:
virtual ~CustomType() {}
virtual QVariant toVariant() const { return QVariant(); }
};
Run Code Online (Sandbox Code Playgroud)
然后我从中继承了我的自定义 Money 类。
class Money : public CustomType {
public:
Money(double d) {
_value = d;
}
~Money() {}
QVariant toVariant() {
return QVariant(_value);
}
private:
double _value;
};
Run Code Online (Sandbox Code Playgroud)
这允许我传递 QVariants 中包含的自定义 Money 变量,以便我可以在 Qt 属性系统、模型/视图框架或 sql 模块中使用它们。
但是,如果我需要将自定义 Money 变量存储在数据库中(使用 QSqlQuery.addBindValue),它不能是自定义类,它必须是已知类型(如 double)。
QVariant myMoneyVariant = myqobject.property("myMoneyProperty");
void *myData = myMoneyVariant.data();
CustomType *custType = static_cast<CustomType*>(myData);
QVariant myNewVariant = ct->toVariant();
Run Code Online (Sandbox Code Playgroud)
myNewVariant现在具有 double 类型,而不是 Money 类型,因此我可以在数据库中使用它:
myqsqlquery.addBindValue(myNewVariant);
Run Code Online (Sandbox Code Playgroud)
或将其转换为字符串:
QString s = myNewVariant.toString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15957 次 |
| 最近记录: |