#ifndef _DATA_COLUMN_ #define _DATA_COLUMN_ #define INSENSETIVE #include #include #include #include "UtilityGlobal.h" #include using namespace std; class DataTable; /* 定义:表示 DataTable 或DataRow中的列的架构 DataColumn是用于创建 架构DataTable的基本构建基块。 通过将一个或多个 DataColumn 对象添加到 来 DataColumnCollection生成架构。 可通过Value()获取值Value(param)设置值 也可通过=设置值 */ template class UTILITY_API TDataColumn { public: TDataColumn() : _column_name(QString()), _caption(QString()){}; TDataColumn(const QString& column_name) : _column_name(column_name), _caption(QString()){}; TDataColumn(const QString& column_name, QVariant::Type column_type) : _column_name(column_name), _type(column_type){}; virtual ~TDataColumn(){}; public: void Caption(const QString& caption) { _caption = caption; } //设置列的标题 QString Caption() const { return _caption.size() ? _caption : _column_name; } //获取列的标题 void ColumnName(const QString& column_name) { _column_name = column_name; } //设置 DataColumnCollection 中的列的名称 QString ColumnName() const { return _column_name; } //获取 DataColumnCollection 中的列的名称 void Value(const T& value) { _value = value; } //获取值 T Value() const { return _value; } //设置值 void Table(DataTable* p_table){ _table = p_table; } //设置列所属的 DataTable DataTable* Table() const { return _table; } //获取列所属的 DataTable QVariant::Type DataType() const { return _type;} //获取存储在列中的数据的类型 void DataType(QVariant::Type column_type) { _type = column_type;} //设置存储在列中的数据的类型 protected: QString _column_name; //列名 QString _caption; //列的标题 T _value = T(); //值 QVariant::Type _type; //列的数据类型 DataTable* _table = nullptr; //列所属DataTable }; //template class UTILITY_API TDataColumn; //template class UTILITY_API TDataColumn; template class UTILITY_API TDataColumn; // 经测试,QVariant没有精度问题 class UTILITY_API DataColumn : public TDataColumn { friend class DataColumnCollection; friend class DataTable; public: DataColumn() : TDataColumn(){}; explicit DataColumn(const QString& column_name) : TDataColumn(column_name) {} DataColumn(const QString& column_name, QVariant::Type column_type) : TDataColumn(column_name, column_type) {} ~DataColumn() { }; QString toString() { if(this->Value().isNull()) { return ""; } if (this->DataType() == QVariant::DateTime) { return this->Value().toDateTime().toString("yyyy-MM-dd"); } else { return this->Value().toString(); } } int toInt() { if(this->Value().isNull()) { return 0; } return this->Value().toInt(); } double toDouble() { if(this->Value().isNull()) { return 0; } return this->Value().toDouble(); } bool toBool() { if(this->Value().isNull()) { return false; } return this->Value().toBool(); } DataColumn(const DataColumn& data_column) { *this = data_column; } DataColumn &operator=(const DataColumn& data_column) { _column_name = data_column._column_name; _caption = data_column._caption; _value = data_column._value; _table = data_column._table; _type = data_column._type; return *this; } DataColumn &operator=(const QVariant& value) { //可使用=给value赋值 _value = value; return *this; } }; //备用代码: QString 版本 /* class UTILITY_API DataColumn : public TDataColumn { public: friend class DataColumnCollection; friend class DataTable; DataColumn() : TDataColumn(){}; ~DataColumn(){ qDebug() << "delete!"; }; DataColumn(const DataColumn& data_column){ *this = data_column; } DataColumn &operator=(const DataColumn& data_column) { _column_name = data_column._column_name; _caption = data_column._caption; _value = data_column._value; _table = data_column._table; return *this; } DataColumn(const QString& column_name) : TDataColumn(column_name){} void Show() { qDebug() << "columnName:" << _column_name << ",caption:" << Caption() << ",value:" << _value ; } }; */ #endif