如何从用户类型的QVariant中获取数据

How to get data back from QVariant for a usertype?

本文关键字:QVariant 获取 数据 类型 用户      更新时间:2023-10-16

我正在使用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("Testn");
}

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

经过两天的谷歌搜索和尝试各种组合,我终于找到了如何做到这一点。下面是一个使用QComboBox放置项目并将其取回的示例。CCD_ 6是与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("Testn");
}

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

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