gpt4 book ai didi

c++ - Qt Index 属性返回负数

转载 作者:行者123 更新时间:2023-11-28 04:27:53 25 4
gpt4 key购买 nike

我很迷茫。我有一个类对象,我在其中将一个属性设置为一个 int 值。但是,当我查看该值或尝试通过代码检索它时,它会返回一个巨大的负数。为什么会这样?

enter image description here

然后我根据列表中字符串位置的索引设置实际值,如下所示:

-1163005939

MyObject.h

#ifndef MYOBJECT_H
#define MYOBJECT_H

#include <QObject>
#include <QString>

class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr);
MyObject(const QString &title, QObject *parent = nullptr);

QString title;
QString getTitle() const;
void setTitle(const QString &value);

int index;
int getIndex() const;
void setIndex(const int &value);

signals:

public slots:

private:
};

#endif // MYOBJECT_H

MyObject.cpp

#include "myobject.h"

MyObject::MyObject(QObject *parent) : QObject(parent)
{

}

MyObject::MyObject(const QString &title, QObject *parent) : QObject(parent)
{
setTitle(title);
}

QString MyObject::getTitle() const
{
return title;
}

void MyObject::setTitle(const QString &value)
{
title = value;
}

int MyObject::getIndex() const
{
return index;
}

void MyObject::setIndex(const int &value)
{
index = value;
}

main.cpp

#include <QCoreApplication>
#include "myobject.h"
#include <QList>
#include <QStringList>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

// Create a list of objects
const QStringList names{"Kevin","Amy","Michelle","John"};

QList<MyObject> objects;
for (int i = 0; i < names.size(); i++) {
MyObject obj = new MyObject(names[i]);
// MyObject obj(names[i]);
obj.setIndex(i);
}

// Sort Alphabetically
std::sort(objects.begin(), objects.end(), [](const MyObject& a, const MyObject& b) -> bool { return a.getTitle() < b.getTitle(); });
// Then Sort By Index
std::sort(objects.begin(), objects.end(), [](const MyObject& a, const MyObject& b) -> bool { return a.getIndex() < b.getIndex(); });

// Print info
for (int i=0; i < objects.size(); i++) {
qDebug() << objects[i].getIndex();
qDebug() << objects[i].getTitle();
}

return a.exec();
}

最佳答案

您的示例代码存在许多问题,但这些问题足以让您了解(我认为)您正在尝试做什么。

首先,显示的代码实际上并未添加任何 MyObject实例到 QList<MyObject>变量——基于一些注释掉的代码——你已经遇到了最大的问题:QObject不可复制。自 MyObject继承自 QObject这意味着像下面这样的代码根本无法编译...

QList<MyObject> objects;
MyObject obj("title");
objects.append(obj);

调用objects.append(...)将生成一条错误消息...

use of deleted function ‘MyObject::MyObject(const MyObject&)

要实现您想要的效果,您需要存储 MyObject通过引用或指针实例。例如……

const QStringList names{"Kevin", "Amy", "Michelle", "John"};

QList<MyObject *> objects;
for (int i = 0; i < names.size(); i++) {
MyObject *obj = new MyObject(names[i]);
obj->setIndex(i);
objects.append(obj);
}

// Sort Alphabetically
std::sort(objects.begin(), objects.end(),
[](const MyObject *a, const MyObject *b) -> bool
{
return a->getTitle() < b->getTitle();
});

// Then Sort By Index
std::sort(objects.begin(), objects.end(),
[](const MyObject *a, const MyObject *b) -> bool
{
return a->getIndex() < b->getIndex();
});

// Print info
for (int i=0; i < objects.size(); i++) {
qDebug() << objects[i]->getIndex();
qDebug() << objects[i]->getTitle();
}

请注意,以上要求调用delete关于各种MyObject当你不再需要它们的时候——QList析构函数不会为你做那件事。

与其使用原始指针,不如看看使用 std::unique_ptr 的可能性。或 std::shared_ptr根据您的具体要求。这样您就不需要在内存管理方面同样关心自己。

关于c++ - Qt Index 属性返回负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53832841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com