2

QComboBox用来从 Units 表中选择单位(对象的任意属性)。问题是我的数据模型中的对象可以没有单位(表中的 NULL),在这种情况下QComboBox显示值发生在列表的顶部。选择“无”是不可能的。
您建议添加 NULL 支持什么?我有几个版本:

  1. 在名为“--”或“N/A”的单位表中插入特殊记录。不完全是 NULL - 会有自己的 id。
  2. 手动设置项目QComboBox并更新模型。可能但乏味 - 再见单元列表的自动更新。

还有什么可能 - 子类化QComboBox(覆盖什么)?我没有看到任何类似于setEditorData/setModelData喜欢的东西QAbstractItemDelegate来控制项目。

4

1 回答 1

1

您可以对模型进行子类化,这样data将为 NULL 返回一个特殊值,然后setData检查该特殊值并替换为 NULL。

代码示例草图:

class MyModel : public QSqlTableModel
{
  Q_OBJECT
  public:
    MyModel();
    virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
    virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
};

QVariant MyModel::data(const QModelIndex& idx, int role)
{
  QVariant var = QSqlTableModel::data(idx, role);
  if (var.isNull())
    var = QVariant(QString("NULL"));
  return var;
}

bool MyModel::setData(const QModelIndex& idx, const QVariant& value, int role)
{
  QVariant var(value);
  if (var == QString("NULL"))
    var == QVariant(record().field(idx.column()).type());
  return QSqlTableModel::setData(idx, var, role);
}
于 2012-01-23T12:59:30.493 回答