QTableView中仅可编辑复选框的列

时间:2015-01-04 23:49:43

标签: c++ qwidget qtableview qt5.3 qcheckbox

我的列中包含QTableView中的复选框。该复选框由以下人员生成:

  1. 在重写的Qt::ItemIsUserCheckable成员函数
  2. 中返回flags
  3. 在重写的data()函数中,我根据数据为Qt::CheckState返回role == Qt::CheckStateRole
  4. 工作,请参见截图。

    但是在复选框旁边,我在列中有一些可编辑的文本框。 如何摆脱此文本框(我已输入" dsdsdsds"用于演示?澄清,复选框应该是可编辑的,但没有别的。

    Readmode Editmode


    根据要求,我只能显示简化版

    Qt::ItemFlags MyClass::flags(const QModelIndex &index) const {
     Qt::ItemFlags f = QAbstractListModel::flags(index);
     ... return f if index is not target column ....
     // for target column with checkbox
     return (f | Qt::ItemIsEditable | Qt::ItemIsUserCheckable; )
    }
    
    
    QVariant MyClass::data(const QModelIndex &index, int role) const {
      .. do something for other columns
      .. for checkbox column
      if (role != Qt::CheckStateRole) { return QVariant(); }
      bool b = ... get value for checkbox column
      Qt::CheckState cs = b ? Qt::Checked : Qt::Unchecked;
      return QVariant(static_cast<int>(cs));
    }
    

    如果我删除Qt::ItemIsEditable,则该复选框也是只读的。后来我发现SO answer采用了类似的方法。


    备注:A checkbox only column in QTableView

    没有重复

1 个答案:

答案 0 :(得分:2)

替换旗帜

Qt::ItemIsEditable

带有标志

Qt::ItemIsEnabled

第一个告诉Qt为模型中存在的值创建一个编辑器,在你的情况下似乎是一个texteditor。 如果值为bool类型,则会显示包含truefalse的下拉列表。