Я работаю с 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
}
Щелчок не покрывает случай использования клавиш со стрелками. Является ли мой единственный вариант вручную проверять, нажали ли пользователи клавишу со стрелкой или другое решение уже существует?
Для этого и нужны делегаты. Создайте объект делегата для представления и установите его в 3-м столбце, используя setItemDelegateForColumn
, Обратите внимание, что делегаты не должны быть разделены несколькими представлениями. Каждому представлению нужен свой делегат. Для делегата имеет смысл быть потомком представления.
В вашем делегате вы создадите поле со списком в реализации createEditor
метод. Вам конечно нужно реализовать setEditorData
, setModelData
, так далее.
Других решений пока нет …