qt数据类型定义(包含签名)

发布于:2024-12-08 ⋅ 阅读:(129) ⋅ 点赞:(0)

先推荐一个处理markdown表格的网站,超级好用:markdown表格处理,我就是用这个表格处理的excel中的数据上传。

下表整理了数据类型的值范围、签名、qt如何定义等内容。

类型 范围/子类型 dbus签名 qt支持的签名 qt类型定义方式 转换为variant
int8(c) -128~127 y y quint8/uchar
uint8 0~255 y y quint8/uchar
int16 -32768~32767 n n qint16/short QVariant::fromValue(arg)
uint16 0~65535 q q quint16/ushort QVariant::fromValue(arg)
int32 -2147483648~2147483647 i i qint32/int
uint32 0~4294967295 u u quint32/uint
int64 -9223372036854775808~9223372036854775807 x x qint64/qlonglong
uint64 0~18446744073709551615 t t quint64/qulonglong
float32(f) -3.4E38 -1~+3.4E38+1 d d double
float64 -1.79E+308 ~ +1.79E+308 d d double
bool b b bool
string s s QString
void
array ac ay ay QByteArray data; QVariantMap data;
QList<uint> auint;
auint.append(0);
data["arg"] = QVariant::fromValue(auint);

QVariant vrt;
vrt.setValue<QVariantMap>(data);
ay ay ay QByteArray
an an an QList<short>
aq aq aq QList<ushort>
ai ai ai QList<int>
au au au QList<uint>
ax ax ax QList<qlonglong>
at at at QList<qulonglong>
af ad ad QList<double>
ad ad ad QList<double>
ab ab ab QList<bool>
as as as QStringList
variant v v QVariant
map a{sy} a{sy} a{sy} QMap<QString, uchar> map转variant: QMap<QString, QVariant> data;
data.insert("key1", 1);
data.insert("key2", "2a");
data.insert("key3", 3.23);
data.insert("中文key", false);
// QVariant datav = QVariant::fromValue(data);

QMap<QString, QMap<QString, QVariant>> data1;
data1.insert("key", data);
QVariant vrt = QVariant::fromValue(data1);
a{sn} a{sn} a{sn} QMap<QString, short>
a{sq} a{sq} a{sq} QMap<QString, ushort>
a{si} a{si} a{si} QMap<QString, int>
a{su} a{su} a{su} QMap<QString, uint>
a{sx} a{sx} a{sx} QMap<QString, qlonglong>
a{st} a{st} a{st} QMap<QString, qulonglong>
a{ss} a{ss} a{ss} QMap<QString, QString>
a{sd} a{sd} a{sd} QMap<QString, double>
a{sb} a{sb} a{sb} QMap<QString, bool>
a{sa} a{sa} a{sa} QMap<QString, QStringList>
a{sv} a{sv} a{sv} QMap<QString, QVariant>
a{sa{sv}} a{sa{sv}} a{sa{sv}} QMap<QString, QMap<QString, QVariant>>
a{yv}、a{nv}...a{dv} a{yv} 不支持 / 这种场景的构造可以使用d-feet或用gdbus
a{bv}、a{av}没有这种以bool或数组作为key值

数据说明:
1、qt不支持int8,只支持quint8或uchar,默认范围是0-255。如果qt定义此范围外的数据,会自动转换,比如-1会转成255,256会转成0。
2、qt不支持uint8的数组,只支持QByteArray,默认范围是-128-127。如果是此范围外的数据,qt会自动转换,比如255会转成-1, 250会转成-6。但是dbus支持的范围是0-255,所以-1或者-6到dbus后,又会被转为255或250。

备注:
1、QVariantMap定义的、不管是几层嵌套,其实签名都是a{sv}–[map[string]dbus.Variant] 。
2、QVariantMap相当于QMap<QString, QVariant>。