如何从用户类型的QVariant中获取数据
How to get data back from QVariant for a usertype?
我正在使用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()
。如果有人知道如何使用构造函数,那么展示一下就好了。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- 给定QVariant,获取对某个类型的变量的引用
- 如何从用户类型的QVariant中获取数据