如何使用QTableView使用现场QCOMBOBOX

How to use in-place QComboBox with a QTableView

本文关键字:现场 QCOMBOBOX 何使用 QTableView      更新时间:2023-10-16

我正在使用QTableView,我想在每个单元格的第三列中添加QComboBox。将有数千个单元格,所以我选择了一个编辑器解决方案。我希望在用户通过单击进入单元格或用户使用箭头键在第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 
}

单击不涵盖使用箭头键的情况。我是手动检查用户是否按下箭头键的唯一选择还是已经存在其他解决方案?

这就是代表的目的。为视图创建一个委托对象,并使用setItemDelegateForColumn在第三列上设置它。请注意,代表不得通过多个视图共享。每个观点都需要自己的代表。代表成为观点的孩子是有意义的。

在您的委托中,您将在createEditor方法的实现中创建组合框。您当然需要实现setEditorDatasetModelData等。