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

Dev*_*lus 5 c++ qt

我正在使用a 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");
}
Run Code Online (Sandbox Code Playgroud)

但是如何获取数据呢?当我使用data()指针不同时,所以这似乎不正确.从gooogling我有一种印象,我必须为我想要使用的每个类注册一个类型QVariant是正确的还是我可以检索没有它的值?

Dev*_*lus 7

经过两天的谷歌搜索并尝试各种组合后,我终于找到了如何做到这一点.这是一个使用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");
}
Run Code Online (Sandbox Code Playgroud)

所以我的第一个使用方法value()是在正确的轨道上,唯一缺少的是如何设置值和使用宏Q_DECLARE_METATYPE(IDataContainer *).

显然使用构造函数不起作用,因此必须调用setValue().如果有人知道如何使用构造函数,那么显示它会很好.