我正在使用QVariant将对象存储在Qcombobox中,这似乎工作正常。这是实施代码:
在标题中添加类型到QVariant:
Q_DECLARE_METATYPE(CDiscRecorder*)
pDiscRecorder成为CDiscRecorder:
CDiscRecorder* pDiscRecorder = new CDiscRecorder();
然后存储在组合框中
ui->cbDrives->addItem(QString::fromWCharArray(strName), QVariant::fromValue(pDiscRecorder));
当我试图把它拉出来时出现问题:
CDiscRecorder* discRecorder = this->ui->cbDrives->itemData(index).value<CDiscRecorder*>;
我收到错误:
error C3867: 'QVariant::value': function call missing argument list; use '&QVariant::value' to create a pointer to member
我试图在错误代码中实现提示无济于事,我已经跟着线程Add QObject in the combo box of Qt实现了这个行为,怎么能让我的对象回来?
由于
答案 0 :(得分:5)
编译器给你提示缺少参数列表 - 你需要做的就是添加括号来告诉它你正试图调用该函数。所以把它改成
CDiscRecorder* discRecorder = this->ui->cbDrives->itemData(index).value<CDiscRecorder*>();
它应该有效。这是一个相当长的路线,打破它可能更干净
QVariant variant = this->ui->cbDrives->itemData(index);
CDiscRecorder* discRecorder = variant.value<CDiscRecorder*>();