Qt 获取 QStandardItemModel 的自定义数据类型的引用来更改它

发布于 2024-09-08 21:44:38 字数 632 浏览 4 评论 0原文

这变得有点奇怪,我看不到实际更改 QStandardItemModel 的“数据”的方法。例如:

struct TestStruct {
    std::vector<int> testVector;
    void addNumber(int i){  
        //this method will modify the member vector
    }
};
Q_DECLARE_METATYPE(TestStruct)

QStandardItemModel* model = QStandardItemModel(1,1);
QModelIndex index = model->index(0,0);
TestStruct test;
test.addNumber(1);
model->setData(index, qVariantFromValue(test));

这样,我就可以有效地将一个编号为 1 的 std::vector 添加到模型的索引 {0,0} 中。但是,如何从无法再访问 TestStruct 实例的位置向该 TestStruct 向量添加另一个数字呢?

“data”函数返回一个可以转换为 TestStruct 的 QVariant,但它是一个副本,我需要一个引用......明白了吗?

It's getting a little weird I can't see a method to actually change the "data" of a QStandardItemModel. For example:

struct TestStruct {
    std::vector<int> testVector;
    void addNumber(int i){  
        //this method will modify the member vector
    }
};
Q_DECLARE_METATYPE(TestStruct)

QStandardItemModel* model = QStandardItemModel(1,1);
QModelIndex index = model->index(0,0);
TestStruct test;
test.addNumber(1);
model->setData(index, qVariantFromValue(test));

With that, I will effectively have added a std::vector with the number 1 to the index {0,0} of the model. But how would I add another number to that TestStruct's vector from places that don't have access to the TestStruct instance anymore?

The "data" function returns a QVariant that can be casted as a TestStruct but it's a copy and I need a reference... get it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚雾 2024-09-15 21:44:38

是的,它只会返回值,而不返回引用。

解决此问题的方法是,您可以通过对 QVariant 进行类型转换来获取 struct。然后修改您的 testVector

修改后,再次调用,

model->setData(index, qVariantFromValue(newTest));

其中 newTest 是带有修改后的 Vectorstruct

希望有帮助。

Yes it will return the value only and not it's reference.

A workaround for this is, you can get the struct by Typecasting the QVariant. Then modify your testVector.

After modifications, call again

model->setData(index, qVariantFromValue(newTest));

where newTest is your struct with the modified Vector.

Hope it helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文