1.QMap:二进制“<”: 没有找到接受“const Key”类型的左操作数的运算符
一开始用的是
Struct CustomA
{
//......
int btnIndex=-1;
//....
};
QMap<QPoint,CustomA> map;
这时候提示了如上错误,因为提示的是key,F12进入QPoint的源码查看,发现没有实现 操作符 “<”的函数,QPoint官方自带类无法外部直接添加。
出现这个的原因是:
QMap是基于红黑树实现的,你插入的时候要不断的调整树,调整树就需要排序的规则,QPoint没有实现重载,所以QMap不知道按什么排序
这时候有两种办法:
1.自定义一个类,继承于QPoint,然后实现操作符 “<”的函数重载。QMap里面key就用这个自定义的类。
2.更改key,把QPoint放到其他地方,这个视项目情况而定。
我这边我都是数据使用而已,所以我用了第二种
Struct CustomA
{
bool operator<(const CustomA& rhs) const // 注意:第二个const
{
return this->btnIndex < rhs.btnIndex;
}
int btnIndex=-1;
//....
};
然后用CustomA当key,取的时候key和value取出来用即可,编译通过
QMap<CustomA,QPoint> map;
2.QJson读取 toInt全部是0
{
“layoutWidget”: [
{
“BeginX”: “72”,
“BeginY”: “12”
},
{
“BeginX”: “216”,
“BeginY”: “1”
} ]
}
然后使用如下代码读取
QFile file(".\\layout.json");
file.open(QIODevice::ReadOnly );
QString value = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError))
{
qDebug() << "File open error";
return;
}
QJsonObject jsonObject = document.object();
QJsonArray jsonArray = jsonObject.value("layoutWidget").toArray();
for (int i = 0; i < jsonArray.size(); i++)
{
QJsonObject arrObject = jsonArray.at(i).toObject();
//先tostring 。直接toint全是0
int tempIndex = arrObject.value("BeginX").toString().toInt();
int tempBeginX = arrObject.value("BeginY").toString().toInt();
}
数据的类型,必须先toString,再toInt,才能读出来,直接toInt(),全部都是0