2013-07-31 3 views
4

Я использую QVariant для хранения объекта внутри Qcombobox. Кажется, он работает нормально. Это внедрение кода:QT - Как получить значения QVariant из combobox?

Добавить тип в 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 реализовать такое поведение, как можно получить свой объект обратно?

Благодаря

ответ

5

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

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

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

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

спасибо, сэр =) ~ – rreeves