QMap定义二进制“<”: 没有找到运算符,及QJson读取toInt全是0的问题

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

猜你喜欢

转载自blog.csdn.net/qq_40861091/article/details/117411884
今日推荐