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

149 lines
4.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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