[Qt] Zmiana opcji QComboBox w QItemDelegate

0

Cześć, mam klasę dziedziczoną po QItemDelegate, ustawiam w niej comboBox dla pojedynczej kolumny. Obrazowo mówiąc ,powiedzmy, że w comboBox mam opcje A, B, C. Jeśli zmienię z opcji A lub B na opcję C to jest +, jeśli z opcji C na opcję A lub B to jest -, a jeśli z opcji A na B lub odwrotnie do nic się nie dzieje. W sumie muszę wiedzieć jaka opcja jest aktualnie wybrana i na jaką zmieniłem, i tu jest właśnie mój problem. Przy zmianie opcji wysyłam sygnał do slotu:

connect(box,SIGNAL(currentIndexChanged(int)),this,SLOT(send(int)));

Ale jest problem z odczytaniem aktualnej wartości dla konkretnego ComboBoxa, ponieważ nie mam jak wysłać drugiego parametru do tego slotu, ani nawet do innej metody która mogła by mi go przechować w polu klasy, ponieważ jak próbuję zrobić przykładowo w metodzie setEditorData wywołanie:

setIndex(box->currentIndex()); // < --- moja własna metoda

Wywala mi błąd:
passing 'const ItemDelegate' as 'this' argument of 'void ItemDelegate::setIndex(int)' discards qualifiers
Da się to jakoś obejść?

0

Czytać nie umiesz? setEditorData jest metodą stałą, a ty w niej chcesz wywołać metodę nie stałą dla tego obiektu. setEditorData powinno modyfikować dane edytora, czyli powinieneś zrobić coś takiego:

void TwojaKlasa::setEditorData(QWidget  * editor, const QModelIndex & index) const { 
      QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
      Q_ASSERT(comboBox);
      comboBox->setCurrentIndex(index->data(RoleDoEdycji).toInt()); // przykładowe coś
}

Poza tym jak następuje zmiana wartości, to przecież, starą wartość masz w modelu a nową w QComboBox, więc nie rozumiem problemu.

Polecam example: http://doc.trolltech.com/4.6/itemviews-spinboxdelegate.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1