Я открываю пользовательские типы с помощью QVariant и пытаюсь реализовать их в своем проекте.
Проблема в том, что создается впечатление, что он создает объект с конструктором по умолчанию, когда я думал, что он будет использовать конструктор копирования ...
Может быть, есть что-то, чего я не понимаю ...
Вот мой пользовательский класс:
Parameter.h
#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
include "parameter.h"
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";
}
Я создаю экземпляр Parameter в классе MainWindow. Следующий код является выдержкой конструктора этого класса:
Parameter *param = new Parameter("Param",0,100,10, this);
QVariant v = QVariant::fromValue(param);
Parameter op = v.value<Parameter>();
qDebug()<< op.getName();
Вывод этого кода:
constructor
Default constructor
Default constructor
"Test"
Я хотел бы понять, почему конструктор по умолчанию вызывается дважды. И что я должен сделать, чтобы вместо этого он вызывал конструктор копирования (чтобы получить созданный мной объект, имя которого «Param»)
Большое спасибо за ваши ответы:)