Я использую 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 чтобы реализовать это поведение, как вернуть мой объект?
Спасибо
Компилятор дает вам подсказку, что список аргументов отсутствует — все, что вам нужно сделать, это добавить скобки, чтобы сообщить, что вы пытаетесь вызвать функцию. Так что измени его
CDiscRecorder* discRecorder = this->ui->cbDrives->itemData(index).value<CDiscRecorder*>();
И это должно работать. Это довольно длинная линия, может быть чище, чтобы сломать ее
QVariant variant = this->ui->cbDrives->itemData(index);
CDiscRecorder* discRecorder = variant.value<CDiscRecorder*>();
Других решений пока нет …