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

时间:2014-04-17 17:37:20

标签: c++ qt

我正在使用QVariantQComboBox

中存储指向我对象的指针
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()时,指针是不同的,所以这似乎不正确。从gooogling我得到的印象是,我必须为QVariant中要使用的每个类注册一个类型是正确的还是我可以在没有它的情况下检索该值?

1 个答案:

答案 0 :(得分:6)

经过两天的谷歌搜索并尝试各种组合后,我终于找到了如何做到这一点。以下是使用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()。如果有人知道如何使用构造函数,那么展示它会很好。