Как использовать на месте QComboBox с QTableView

Я работаю с QTableView и я хочу добавить QComboBox в 3-м столбце каждой ячейки. Будут тысячи ячеек, поэтому я выбрал решение для редактирования на месте. Я хочу, чтобы поле со списком отображалось, когда пользователь входит в ячейку нажатием кнопки или когда пользователи используют клавишу со стрелкой для выбора ячейки в 3-м столбце.

void FixtureCalibrationPage::on_View_clicked(const QModelIndex & index)
{
if(!index.isValid()) return;
if(index.column() != 3) return;
if(selected_table_row == index.row()) return;
if(selected_table_row != -1) { //clean up
ui.view->setIndexWidget(index, NULL);
}
selected_table_row = index.row();
ui.view->setIndexWidget(index, &m_combo_box_selection); //set the
}

Щелчок не покрывает случай использования клавиш со стрелками. Является ли мой единственный вариант вручную проверять, нажали ли пользователи клавишу со стрелкой или другое решение уже существует?

1

Решение

Для этого и нужны делегаты. Создайте объект делегата для представления и установите его в 3-м столбце, используя setItemDelegateForColumn, Обратите внимание, что делегаты не должны быть разделены несколькими представлениями. Каждому представлению нужен свой делегат. Для делегата имеет смысл быть потомком представления.

В вашем делегате вы создадите поле со списком в реализации createEditor метод. Вам конечно нужно реализовать setEditorData, setModelData, так далее.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]