首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制QVariant故障

定制QVariant故障
EN

Stack Overflow用户
提问于 2018-05-09 12:19:49
回答 1查看 466关注 0票数 0

我正在用QVariant发现自定义类型,并试图在我的项目中实现它。问题是,当我认为它会使用复制构造函数时,它似乎创建了一个带有默认构造函数的对象.

也许有些事我不明白..。

这是我的定制课程:

Parameter.h

代码语言:javascript
复制
#ifndef PARAMETER_H
#define PARAMETER_H
#include <QDebug>
#include <QMetaType>

#include "variable.h"
#include <QAbstractTableModel>

class Parameter : public Variable, public QAbstractTableModel
{
public:
    Parameter();
    Parameter(QString name, int min, int max, int val, QObject *parent);
    Parameter(const Parameter &source);

private:
    int m_value;
};
Q_DECLARE_METATYPE(Parameter)

#endif // PARAMETER_H

Parameter.cpp

包括参数.h

代码语言:javascript
复制
Parameter::Parameter() : Variable()
{
    qDebug()<<"Default constructor";
    m_value = 0;
    setName("Test");
}

Parameter::Parameter(QString name, int min, int max, int val, QObject     *parent)
: Variable(name, min, max), QAbstractTableModel(parent)
{
    qDebug()<<"constructor";
    m_value = val;
}

 Parameter::Parameter(const Parameter &source)
     : Variable(source.getName(), source.getMin(), source.getMax()),
      QAbstractTableModel(),
      m_value(source.m_value)
{
    qDebug()<<"copy constructor";  
}

我在类MainWindow中创建了一个参数实例。以下代码是该类构造函数的摘录:

代码语言:javascript
复制
Parameter *param = new Parameter("Param",0,100,10, this);
QVariant v = QVariant::fromValue(param);
Parameter op = v.value<Parameter>();
qDebug()<< op.getName();

此代码的输出是:

代码语言:javascript
复制
constructor
Default constructor 
Default constructor
"Test"

我想了解为什么默认构造函数会被调用两次。以及我应该做的事情,以便它调用复制构造函数(以获得我创建的对象,其名称为“Param”)。

非常感谢你的回答:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 12:25:49

您可以将指针存储在QVariant中而不是值中。但想要找回价值。

如果无法转换值,则将返回默认构造的值。

因此,v.value<Parameter>();返回默认构造的对象,因为Parameter*不能转换为Parameter

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50253277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档