QT - 如何从组合框中检索QVariant值?

rre*_*ves 5 c++ qt qvariant qcombobox

我正在使用QVariant将对象存储在Qcombobox中,这似乎工作正常.这是实施代码:

在标题中向QVariant添加类型:

Q_DECLARE_METATYPE(CDiscRecorder*)
Run Code Online (Sandbox Code Playgroud)

pDiscRecorder作为CDiscRecorder:

CDiscRecorder* pDiscRecorder = new CDiscRecorder();
Run Code Online (Sandbox Code Playgroud)

然后存储在组合框中

ui->cbDrives->addItem(QString::fromWCharArray(strName), QVariant::fromValue(pDiscRecorder));
Run Code Online (Sandbox Code Playgroud)

当我试图把它拉出来时出现问题:

CDiscRecorder* discRecorder = this->ui->cbDrives->itemData(index).value<CDiscRecorder*>;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

error C3867: 'QVariant::value': function call missing argument list; use '&QVariant::value' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)

我试图在错误代码中实现提示无济于事,我已经在Qt的组合框中跟随线程添加QObject来实现这种行为,怎么能让我的对象回来?

谢谢

doc*_*eer 6

编译器给你提示缺少参数列表 - 你需要做的就是添加括号来告诉它你正试图调用该函数.所以改成它

CDiscRecorder* discRecorder = this->ui->cbDrives->itemData(index).value<CDiscRecorder*>();
Run Code Online (Sandbox Code Playgroud)

它应该工作.这是一个相当长的路线,可能更清楚,以打破它

QVariant variant = this->ui->cbDrives->itemData(index);
CDiscRecorder* discRecorder = variant.value<CDiscRecorder*>();
Run Code Online (Sandbox Code Playgroud)