【问题标题】:How to use in-place QComboBox with a QTableView [closed]如何使用 QTableView 就地 QComboBox [关闭]
【发布时间】:2014-01-23 21:13:58
【问题描述】:

我正在使用QTableView,我想在每个单元格的第三列中添加QComboBox。将有数千个单元格,因此我选择了就地编辑器解决方案。我希望在用户通过单击输入单元格时或当用户使用箭头键选择第三列中的单元格时显示组合框。

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 
}

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

【问题讨论】:

  • 这个问题是由无法再复制的问题或简单的印刷错误引起的。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。这通常可以通过在发布之前确定并仔细检查重现问题所需的最短程序来避免。

标签: c++ qt uitableview combobox window


【解决方案1】:

这就是代表的用途。为视图创建一个委托对象,并使用setItemDelegateForColumn 将其设置在第三列。请注意,委托不得由多个视图共享。每个视图都需要自己的委托。委托是视图的子级是有意义的。

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

【讨论】:

  • 我最初是从查看代表开始的,但我创建的代表没有显示。我使用的例子没有提到setItemDelegateForColumn。你知道任何有这方面例子的资源吗?
  • @andre 通常情况下,请创建一个最小的单文件示例。查看我的其他答案,了解单文件 Qt 应用程序的外观 - 几乎每个我提供大量代码的答案都是独立的、单文件的、可编译和测试的。
  • @andre setItemDelegateForColumn 没什么特别的。它只是可用于在视图上设置委托的四种方法之一。您可能没有在模型上设置委托。不看代码很难说。我厌倦了处理被告知“我已经尝试过”然后面临拒绝共享代码的问题。我不想要一堵代码墙。举一个简短的例子说明它是如何不起作用的。 Minimal 是一个关键词。如果你做得对,它应该几乎不需要滚动你的问题。
  • @andre Qt 至少包含四个委托示例。 Qt Creator -> Welcome pane -> Examples -> 在搜索栏中输入 delegate,点击 Enter。有多难?
  • 长话短说,当我使用setItemDelegateForColumn 而不是setItemDelegate 时,我的旧方法有效。在我明天进行调查之前,我必须先调查一下它为什么不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-03-18
  • 2011-08-20
  • 2018-06-14
  • 2012-08-19
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多