Я делаю какие-то настольные вещи в Qt C++
и сегодня я нашел что-то очень подозрительное после того, как я установил sortEnabled(true)
, Я хотел отсортировать QTableWidget
по столбцам, и именно поэтому я установил это свойство true
, Логически я получил то, что хотел, но заметил, что когда double click
на row of a table
открывается модальное диалоговое окно, соответствующее другой строке.
Я положил в эту таблицу QTableWidgetItem-s
,
QTableWidgetItem* widgetItem = new QTableWidgetItem();
widgetItem->setData(Qt::UserRole, it->id);
На double click signal
Я извлекаю элемент строки с QTableWidget::item(int aRow, int aCol)
, затем я получаю пользовательский уникальный идентификатор (в каждой строке я назначил уникальные идентификаторы).
Дело в том, что после нажатия на заголовок столбца и сортировки я получаю идентификатор строки, которая была в этой позиции до сортировки. Идентификатор, который я получил сейчас, соответствует другой строке, потому что я отсортирован по другому столбцу.
Как мне избежать этой проблемы? Я сделал что-то неправильно. Или я забыл установить какое-либо свойство в true / false?
Я думаю что sort
влияет только на визуальную сторону стола, но не структурно …
Я просто хочу правильный идентификатор, больше ничего.
Вот краткий пример ситуации с таблицей:
Перед сортировкой:
===id=======category==
| 47 | b |
| 48 | a |
| 49 | c |
| 50 | d |
======================
Когда дважды щелкните по b
item (1,1) возвращает correct QTableWidget*
а также ID = 47
Теперь я нажимаю заголовок catetegory, чтобы отсортировать
После сортировки:
===id=======category==
| 48 | a |
| 47 | b |
| 49 | c |
| 50 | d |
======================
Когда дважды щелкните по a
item (1,1) возвращает the old one QTableWidget*
а также ID = 47
СНОВА! Я хочу получить 48, а не 47 ..
Может кто-нибудь мне помочь?
Я не знаю, почему это не дает вам правильный предмет, но вы должны просто слушать QTableWidget::itemDoubleClicked()
сигнал, который отправляет вам фактический предмет, так что вам не нужно ходить вокруг, чтобы получить его.
Других решений пока нет …