numeric field phrase
This commit is contained in:
parent
09877631d2
commit
a9224fcb40
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
NUT_BEGIN_NAMESPACE
|
NUT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
DbGeography::DbGeography(QObject *parent) //: QObject(parent)
|
DbGeography::DbGeography(QObject *parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -29,7 +29,6 @@ void DbGeography::setLatitude(qreal latitude)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_latitude = latitude;
|
m_latitude = latitude;
|
||||||
// emit latitudeChanged(latitude);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DbGeography::setLongitude(qreal longitude)
|
void DbGeography::setLongitude(qreal longitude)
|
||||||
|
|
@ -38,7 +37,20 @@ void DbGeography::setLongitude(qreal longitude)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_longitude = longitude;
|
m_longitude = longitude;
|
||||||
// emit longitudeChanged(longitude);
|
}
|
||||||
|
|
||||||
|
QString DbGeography::toString()
|
||||||
|
{
|
||||||
|
return QString("%1,%2").arg(longitude()).arg(latitude());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbGeography::fromString(const QString &s)
|
||||||
|
{
|
||||||
|
QStringList parts = s.split(',');
|
||||||
|
if (parts.count() == 2) {
|
||||||
|
setLongitude(parts[0].toDouble());
|
||||||
|
setLatitude(parts[1].toDouble());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,6 @@ NUT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class NUT_EXPORT DbGeography //: public QObject
|
class NUT_EXPORT DbGeography //: public QObject
|
||||||
{
|
{
|
||||||
// Q_PROPERTY(qreal latitude READ latitude WRITE setLatitude NOTIFY
|
|
||||||
// latitudeChanged)
|
|
||||||
// Q_PROPERTY(qreal longitude READ longitude WRITE setLongitude NOTIFY
|
|
||||||
// longitudeChanged)
|
|
||||||
qreal m_latitude;
|
qreal m_latitude;
|
||||||
qreal m_longitude;
|
qreal m_longitude;
|
||||||
|
|
||||||
|
|
@ -23,13 +19,11 @@ public:
|
||||||
qreal latitude() const;
|
qreal latitude() const;
|
||||||
qreal longitude() const;
|
qreal longitude() const;
|
||||||
|
|
||||||
//signals:
|
|
||||||
// void latitudeChanged(qreal latitude);
|
|
||||||
// void longitudeChanged(qreal longitude);
|
|
||||||
|
|
||||||
//public slots:
|
|
||||||
void setLatitude(qreal latitude);
|
void setLatitude(qreal latitude);
|
||||||
void setLongitude(qreal longitude);
|
void setLongitude(qreal longitude);
|
||||||
|
|
||||||
|
QString toString();
|
||||||
|
void fromString(const QString &s);
|
||||||
};
|
};
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -37,36 +37,36 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
||||||
|
|
||||||
switch (field->type) {
|
switch (field->type) {
|
||||||
case QVariant::Bool:
|
case QVariant::Bool:
|
||||||
dbType = "boolean";
|
dbType = "BOOLEAN";
|
||||||
break;
|
break;
|
||||||
case QVariant::ByteArray:
|
case QVariant::ByteArray:
|
||||||
dbType = "blob";
|
dbType = "BLOB";
|
||||||
break;
|
break;
|
||||||
case QVariant::DateTime:
|
case QVariant::DateTime:
|
||||||
dbType = "datetime";
|
dbType = "DATETIME";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QVariant::Date:
|
case QVariant::Date:
|
||||||
dbType = "date";
|
dbType = "DATE";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QVariant::Time:
|
case QVariant::Time:
|
||||||
dbType = "time";
|
dbType = "TIME";
|
||||||
break;
|
break;
|
||||||
case QVariant::Double:
|
case QVariant::Double:
|
||||||
dbType = "real";
|
dbType = "REAL";
|
||||||
break;
|
break;
|
||||||
case QVariant::Int:
|
case QVariant::Int:
|
||||||
dbType = "int(4)";
|
dbType = "INT(4)";
|
||||||
if(field->isAutoIncrement)
|
if(field->isAutoIncrement)
|
||||||
dbType += " auto_increment";
|
dbType += " AUTO_INCREMENT";
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case QVariant::String:
|
case QVariant::String:
|
||||||
if(field->length)
|
if(field->length)
|
||||||
dbType = QString("varchar(%1)").arg(field->length);
|
dbType = QString("VARCHAR(%1)").arg(field->length);
|
||||||
else
|
else
|
||||||
dbType = "text";
|
dbType = "TEXT";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QVariant::Point:
|
case QVariant::Point:
|
||||||
|
|
@ -79,6 +79,10 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
||||||
dbType = "POLYGON";
|
dbType = "POLYGON";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case QVariant::Uuid:
|
||||||
|
dbType = "VARCHAR(64)";
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
qWarning("Type %s::%s(%d) is not supported",
|
qWarning("Type %s::%s(%d) is not supported",
|
||||||
qPrintable(field->name),
|
qPrintable(field->name),
|
||||||
|
|
|
||||||
|
|
@ -35,39 +35,59 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field)
|
||||||
|
|
||||||
switch (field->type) {
|
switch (field->type) {
|
||||||
case QVariant::Bool:
|
case QVariant::Bool:
|
||||||
dbType = "boolean";
|
dbType = "BOOLEAN";
|
||||||
break;
|
break;
|
||||||
case QVariant::ByteArray:
|
case QVariant::ByteArray:
|
||||||
dbType = "bytea";
|
dbType = "BYTEA";
|
||||||
break;
|
break;
|
||||||
case QVariant::Date:
|
case QVariant::Date:
|
||||||
dbType = "date";
|
dbType = "DATE";
|
||||||
break;
|
break;
|
||||||
case QVariant::DateTime:
|
case QVariant::DateTime:
|
||||||
dbType = "timestamp";
|
dbType = "TIMESTAMP";
|
||||||
break;
|
break;
|
||||||
case QVariant::Time:
|
case QVariant::Time:
|
||||||
dbType = "time";
|
dbType = "TIME";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QVariant::Int:
|
case QVariant::Int:
|
||||||
|
case QVariant::UInt:
|
||||||
if(field->isAutoIncrement)
|
if(field->isAutoIncrement)
|
||||||
dbType = "serial";
|
dbType = "SERIAL";
|
||||||
else
|
else
|
||||||
dbType = "integer";
|
dbType = "INTEGER";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case QVariant::ULongLong:
|
||||||
|
case QVariant::LongLong:
|
||||||
|
if(field->isAutoIncrement)
|
||||||
|
dbType = "BIGSERIAL";
|
||||||
|
else
|
||||||
|
dbType = "BIGINTEGER";
|
||||||
|
break;
|
||||||
|
|
||||||
case QVariant::Double:
|
case QVariant::Double:
|
||||||
dbType = "real";
|
dbType = "REAL";
|
||||||
break;
|
break;
|
||||||
case QVariant::String:
|
case QVariant::String:
|
||||||
if(field->length)
|
if(field->length)
|
||||||
dbType = QString("varchar(%1)").arg(field->length);
|
dbType = QString("VARCHAR(%1)").arg(field->length);
|
||||||
else
|
else
|
||||||
dbType = "text";
|
dbType = "TEXT";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QVariant::Point:
|
case QVariant::Point:
|
||||||
case QVariant::PointF:
|
case QVariant::PointF:
|
||||||
dbType="point";
|
dbType="POINT";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QVariant::Uuid:
|
||||||
|
dbType = "UUID";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QVariant::Polygon:
|
||||||
|
case QVariant::PolygonF:
|
||||||
|
dbType = "POLYGON";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
||||||
QVariant lastPkValue = QVariant();
|
QVariant lastPkValue = QVariant();
|
||||||
int childTypeId = 0;
|
int childTypeId = 0;
|
||||||
T *lastRow = 0;
|
T *lastRow = 0;
|
||||||
TableSetBase *childTableSet;
|
TableSetBase *childTableSet = Q_NULLPTR;
|
||||||
|
|
||||||
//FIXME: getting table error
|
//FIXME: getting table error
|
||||||
// QStringList masterFields = TableModel::findByName(d->tableName)->fieldsNames();
|
// QStringList masterFields = TableModel::findByName(d->tableName)->fieldsNames();
|
||||||
|
|
@ -321,7 +321,7 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::update(WherePhrase phrase)
|
||||||
d->wheres,
|
d->wheres,
|
||||||
d->tableName);
|
d->tableName);
|
||||||
QSqlQuery q = d->database->exec(sql);
|
QSqlQuery q = d->database->exec(sql);
|
||||||
|
qDebug()<<sql;
|
||||||
if (m_autoDelete)
|
if (m_autoDelete)
|
||||||
deleteLater();
|
deleteLater();
|
||||||
return q.numRowsAffected();
|
return q.numRowsAffected();
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,10 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
|
||||||
|
|
||||||
switch (field->type) {
|
switch (field->type) {
|
||||||
case QVariant::Bool:
|
case QVariant::Bool:
|
||||||
dbType = "bit";
|
dbType = "BIT";
|
||||||
break;
|
break;
|
||||||
case QVariant::ByteArray:
|
case QVariant::ByteArray:
|
||||||
dbType = "varbinary";
|
dbType = "VARBINARY";
|
||||||
|
|
||||||
if(field->length)
|
if(field->length)
|
||||||
dbType.append(" (" + QString::number(field->length) + ")");
|
dbType.append(" (" + QString::number(field->length) + ")");
|
||||||
|
|
@ -54,21 +54,21 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
|
||||||
dbType.append(" (MAX)");
|
dbType.append(" (MAX)");
|
||||||
break;
|
break;
|
||||||
case QVariant::Date:
|
case QVariant::Date:
|
||||||
dbType = "date";
|
dbType = "DATE";
|
||||||
break;
|
break;
|
||||||
case QVariant::DateTime:
|
case QVariant::DateTime:
|
||||||
dbType = "datetime";
|
dbType = "DATETIME";
|
||||||
break;
|
break;
|
||||||
case QVariant::Time:
|
case QVariant::Time:
|
||||||
dbType = "time";
|
dbType = "TIME";
|
||||||
break;
|
break;
|
||||||
case QVariant::Double:
|
case QVariant::Double:
|
||||||
dbType = "real";
|
dbType = "REAL";
|
||||||
break;
|
break;
|
||||||
case QVariant::Int:
|
case QVariant::Int:
|
||||||
dbType = "int";
|
dbType = "INT";
|
||||||
if(field->isAutoIncrement)
|
if(field->isAutoIncrement)
|
||||||
dbType += " identity(1,1)";
|
dbType += " IDENTITY(1,1)";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QVariant::Point:
|
case QVariant::Point:
|
||||||
|
|
@ -78,10 +78,15 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
|
||||||
|
|
||||||
case QVariant::String:
|
case QVariant::String:
|
||||||
if(field->length)
|
if(field->length)
|
||||||
dbType = QString("varchar(%1)").arg(field->length);
|
dbType = QString("NVARCHAR(%1)").arg(field->length);
|
||||||
else
|
else
|
||||||
dbType = "varchar(max)";
|
dbType = "NVARCHAR(MAX)";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case QVariant::Uuid:
|
||||||
|
dbType = "UNIQUEIDENTIFIER";
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dbType = "";
|
dbType = "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -200,34 +200,4 @@ WherePhrase WherePhrase::operator&(const WherePhrase &other)
|
||||||
return WherePhrase(this, PhraseData::Append, (WherePhrase *)&other);
|
return WherePhrase(this, PhraseData::Append, (WherePhrase *)&other);
|
||||||
}
|
}
|
||||||
|
|
||||||
WherePhrase WherePhrase::operator==(const QVariant &other)
|
|
||||||
{
|
|
||||||
return WherePhrase(this, PhraseData::Equal, other);
|
|
||||||
}
|
|
||||||
|
|
||||||
WherePhrase WherePhrase::operator!=(const QVariant &other)
|
|
||||||
{
|
|
||||||
return WherePhrase(this, PhraseData::NotEqual, other);
|
|
||||||
}
|
|
||||||
|
|
||||||
WherePhrase WherePhrase::operator<(const QVariant &other)
|
|
||||||
{
|
|
||||||
return WherePhrase(this, PhraseData::Less, other);
|
|
||||||
}
|
|
||||||
|
|
||||||
WherePhrase WherePhrase::operator>(const QVariant &other)
|
|
||||||
{
|
|
||||||
return WherePhrase(this, PhraseData::Greater, other);
|
|
||||||
}
|
|
||||||
|
|
||||||
WherePhrase WherePhrase::operator<=(const QVariant &other)
|
|
||||||
{
|
|
||||||
return WherePhrase(this, PhraseData::LessEqual, other);
|
|
||||||
}
|
|
||||||
|
|
||||||
WherePhrase WherePhrase::operator>=(const QVariant &other)
|
|
||||||
{
|
|
||||||
return WherePhrase(this, PhraseData::GreaterEqual, other);
|
|
||||||
}
|
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -130,15 +130,6 @@ public:
|
||||||
|
|
||||||
WherePhrase operator &(const WherePhrase &other);
|
WherePhrase operator &(const WherePhrase &other);
|
||||||
|
|
||||||
|
|
||||||
WherePhrase operator ==(const QVariant &other);
|
|
||||||
WherePhrase operator !=(const QVariant &other);
|
|
||||||
WherePhrase operator <(const QVariant &other);
|
|
||||||
WherePhrase operator >(const QVariant &other);
|
|
||||||
WherePhrase operator <=(const QVariant &other);
|
|
||||||
WherePhrase operator >=(const QVariant &other);
|
|
||||||
|
|
||||||
|
|
||||||
PhraseData *data() const;
|
PhraseData *data() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -152,6 +143,13 @@ public:
|
||||||
WherePhrase operator +(const QVariant &other);
|
WherePhrase operator +(const QVariant &other);
|
||||||
WherePhrase operator !();
|
WherePhrase operator !();
|
||||||
|
|
||||||
|
WherePhrase operator ==(const QVariant &other);
|
||||||
|
WherePhrase operator !=(const QVariant &other);
|
||||||
|
WherePhrase operator <(const QVariant &other);
|
||||||
|
WherePhrase operator >(const QVariant &other);
|
||||||
|
WherePhrase operator <=(const QVariant &other);
|
||||||
|
WherePhrase operator >=(const QVariant &other);
|
||||||
|
|
||||||
WherePhrase isNull();
|
WherePhrase isNull();
|
||||||
WherePhrase in(QList<T> list);
|
WherePhrase in(QList<T> list);
|
||||||
// WherePhrase in(QStringList list);
|
// WherePhrase in(QStringList list);
|
||||||
|
|
@ -194,6 +192,42 @@ Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator !()
|
||||||
return this;//WherePhrase(this, PhraseData::Not);
|
return this;//WherePhrase(this, PhraseData::Not);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator==(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Equal, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator!=(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::NotEqual, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator<(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Less, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator>(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Greater, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator<=(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::LessEqual, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator>=(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::GreaterEqual, other);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::isNull(){
|
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::isNull(){
|
||||||
return WherePhrase(this, PhraseData::Null);
|
return WherePhrase(this, PhraseData::Null);
|
||||||
|
|
@ -267,6 +301,21 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//template<>
|
||||||
|
//class FieldPhrase<QString>: public WherePhrase {
|
||||||
|
//public:
|
||||||
|
// FieldPhrase(const char *className, const char* s) : WherePhrase(className, s){
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// WherePhrase like(QString pattern)
|
||||||
|
// {
|
||||||
|
// return WherePhrase(this, PhraseData::Like, pattern);
|
||||||
|
// }
|
||||||
|
//};
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class FieldPhrase<bool>: public WherePhrase{
|
class FieldPhrase<bool>: public WherePhrase{
|
||||||
public:
|
public:
|
||||||
|
|
@ -287,6 +336,87 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NumericFieldPhrase: public WherePhrase{
|
||||||
|
public:
|
||||||
|
NumericFieldPhrase(const char *className, const char* s) : WherePhrase(className, s) { }
|
||||||
|
|
||||||
|
WherePhrase operator =(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Set, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator +(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Add, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator -(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Minus, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WherePhrase operator ==(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Equal, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator !=(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::NotEqual, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator <(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Less, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator >(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Greater, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator <=(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::LessEqual, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase operator >=(const QVariant &other)
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::GreaterEqual, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
WherePhrase isNull()
|
||||||
|
{
|
||||||
|
return WherePhrase(this, PhraseData::Null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SPECIALIZATION_NUMERIC(type) \
|
||||||
|
template<> \
|
||||||
|
class FieldPhrase<type>: public NumericFieldPhrase{ \
|
||||||
|
public: \
|
||||||
|
FieldPhrase(const char *className, const char* s) \
|
||||||
|
: NumericFieldPhrase(className, s) { } \
|
||||||
|
WherePhrase operator =(const WherePhrase &other) \
|
||||||
|
{ \
|
||||||
|
return WherePhrase(this, PhraseData::Set, (WherePhrase *)&other); \
|
||||||
|
} \
|
||||||
|
WherePhrase in(QList<type> list) \
|
||||||
|
{ \
|
||||||
|
QVariantList vlist; \
|
||||||
|
foreach (type t, list) \
|
||||||
|
vlist.append(QVariant::fromValue(t)); \
|
||||||
|
return WherePhrase(this, PhraseData::In, vlist); \
|
||||||
|
} \
|
||||||
|
};
|
||||||
|
|
||||||
|
SPECIALIZATION_NUMERIC(qint16)
|
||||||
|
SPECIALIZATION_NUMERIC(qint32)
|
||||||
|
SPECIALIZATION_NUMERIC(qint64)
|
||||||
|
SPECIALIZATION_NUMERIC(qreal)
|
||||||
|
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // PHRASE_H
|
#endif // PHRASE_H
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue