我正在使用QComboBox
从Units表中选择单位(对象的任意属性)。问题是我的数据模型中的对象没有单位(表中为NULL),在这种情况下QComboBox
显示在列表顶部发生的值。选择“无”是不可能的
你有什么建议添加NULL支持?我的版本很少:
QComboBox
中设置项目并手动更新模型。可能但又单调乏味 - 再见自动更新单位清单。还有什么可能 - 继承QComboBox
(覆盖什么)?我没有看到setEditorData
/ setModelData
与QAbstractItemDelegate
中的任何内容类似,无法控制项目。
答案 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);
}