QT - Как получить значения QVariant из поля со списком?

Я использую 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

Я безуспешно пытался внедрить подсказку в код ошибки, я следил за потоком Добавьте QObject в поле со списком Qt, чтобы реализовать это поведение, как вернуть мой объект?

Спасибо


person rreeves    schedule 31.07.2013    source источник


Ответы (1)


Компилятор дает вам подсказку, что список аргументов отсутствует - все, что вам нужно сделать, это добавить скобки, чтобы сообщить ему, что вы пытаетесь вызвать функцию. Так что измените его на

CDiscRecorder* discRecorder = this->ui->cbDrives->itemData(index).value<CDiscRecorder*>();

И это должно работать. Это довольно длинная очередь, может быть, было бы чище, чтобы разбить ее

QVariant variant = this->ui->cbDrives->itemData(index);
CDiscRecorder* discRecorder = variant.value<CDiscRecorder*>();
person docsteer    schedule 31.07.2013