QComboBox支持NULL

时间:2012-01-23 08:28:34

标签: qt null qcombobox

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

  1. 在名为“ - ”或“N / A”的单位表中插入特殊记录。不完全是NULL - 将拥有自己的id。
  2. QComboBox中设置项目并手动更新模型。可能但又单调乏味 - 再见自动更新单位清单。
  3. 还有什么可能 - 继承QComboBox(覆盖什么)?我没有看到setEditorData / setModelDataQAbstractItemDelegate中的任何内容类似,无法控制项目。

1 个答案:

答案 0 :(得分: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);
}