COMPASSi/trunk/code/inc/Util/include/DataColumn.h

149 lines
4.4 KiB
C
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
#ifndef _DATA_COLUMN_
#define _DATA_COLUMN_
#define INSENSETIVE
#include <iostream>
#include <QString>
#include <QDebug>
#include "UtilityGlobal.h"
#include <QDateTime>
using namespace std;
class DataTable;
/* 定义:表示 DataTable 或DataRow中的列的架构
DataColumn是用于创建 DataTable的基本构建基块 DataColumn DataColumnCollection生成架构
Value()Value(param)
= */
template <typename T>
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<QString>;
//template class UTILITY_API TDataColumn<std::string>;
template class UTILITY_API TDataColumn<QVariant>; // 经测试QVariant没有精度问题
class UTILITY_API DataColumn : public TDataColumn<QVariant>
{
friend class DataColumnCollection;
friend class DataTable;
public:
DataColumn() : TDataColumn<QVariant>(){};
explicit DataColumn(const QString& column_name) : TDataColumn<QVariant>(column_name) {}
DataColumn(const QString& column_name, QVariant::Type column_type) : TDataColumn<QVariant>(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<QString>
{
public:
friend class DataColumnCollection;
friend class DataTable;
DataColumn() : TDataColumn<QString>(){};
~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<QString>(column_name){}
void Show()
{
qDebug() << "columnName:" << _column_name << ",caption:" << Caption() << ",value:" << _value ;
}
};
*/
#endif