gpt4 book ai didi

c++ - 如何从 QVariant 获取用户类型的数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:37 26 4
gpt4 key购买 nike

我正在使用 QVariant 将指向我的对象的指针存储在 QComboBox

void MainFrame::initContainerBox(QComboBox *oBox)
{
IDataContainer *idc = new CSVContainer();
QVariant v(QVariant::UserType, idc);

oBox->addItem(idc->getContainername(), v);
void *idc1 = v.data();
if(idc1 == idc)
printf("Test\n");
}

但是我如何取回数据呢?当我使用 data() 时,指针不同,所以这似乎不正确。通过谷歌搜索,我的印象是我必须为我想在 QVariant 中使用的每个类注册一个类型是否正确,或者我可以在没有它的情况下检索值吗?

最佳答案

经过两天的谷歌搜索和尝试各种组合,我终于找到了如何做到这一点。下面是一个使用 QComboBox 放置一个项目并将其取回的示例。 IDataContainer * 是一个与 Qt 无关的任意类。

Q_DECLARE_METATYPE(IDataContainer *)

void MainFrame::initContainerBox(QComboBox *oBox)
{
IDataContainer *idc = new CSVContainer();
QVariant v;
v.setValue(idc);

oBox->addItem(idc->getContainername(), v);
QVariant v2 = oBox->itemData(oBox->currentIndex());

IDataContainer *idc1 = v2.value<IDataContainer *>();
if(idc1 == idc)
printf("Test\n");
}

因此,在我使用 value() 的第一种方法中,我走在了正确的轨道上,唯一缺少的部分是如何设置值和使用宏 Q_DECLARE_METATYPE(IDataContainer *).

显然使用构造函数不起作用,因此必须改为调用 setValue()。如果有人知道如何使用构造函数,那么最好向大家展示一下。

关于c++ - 如何从 QVariant 获取用户类型的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139820/

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