Send the dataChanged signal when data is changed

master
Jos van den Oever 2017-08-19 14:25:20 +02:00
parent d63cc3918c
commit 04f68aa0f9
3 changed files with 32 additions and 29 deletions

View File

@ -205,5 +205,9 @@ QHash<int, QByteArray> FibonacciList::roleNames() const {
}
bool FibonacciList::setData(const QModelIndex &index, const QVariant &value, int role)
{
return false;
bool set = false;
if (set) {
emit dataChanged(index, index, QVector<int>() << role);
}
return set;
}

View File

@ -294,46 +294,45 @@ QHash<int, QByteArray> Tree::roleNames() const {
}
bool Tree::setData(const QModelIndex &index, const QVariant &value, int role)
{
bool set = false;
if (index.column() == 0) {
if (role == Qt::DisplayRole) {
const QString val(value.value<QString>());
return tree_set_data_file_name(d, index.row(), index.internalId(), val);
set = tree_set_data_file_name(d, index.row(), index.internalId(), value.value<QString>());
}
if (role == Qt::EditRole) {
const QString val(value.value<QString>());
return tree_set_data_file_name(d, index.row(), index.internalId(), val);
set = tree_set_data_file_name(d, index.row(), index.internalId(), value.value<QString>());
}
if (role == Qt::UserRole + 1) {
if (!value.isValid() || value.isNull()) {
return tree_set_data_file_path_none(d, index.row(), index.internalId());
}
const QString val(value.value<QString>());
return tree_set_data_file_path(d, index.row(), index.internalId(), val);
set = tree_set_data_file_path_none(d, index.row(), index.internalId());
} else
set = tree_set_data_file_path(d, index.row(), index.internalId(), value.value<QString>());
}
}
if (index.column() == 1) {
if (role == Qt::DisplayRole) {
if (!value.isValid() || value.isNull()) {
return tree_set_data_file_path_none(d, index.row(), index.internalId());
}
const QString val(value.value<QString>());
return tree_set_data_file_path(d, index.row(), index.internalId(), val);
set = tree_set_data_file_path_none(d, index.row(), index.internalId());
} else
set = tree_set_data_file_path(d, index.row(), index.internalId(), value.value<QString>());
}
if (role == Qt::EditRole) {
if (!value.isValid() || value.isNull()) {
return tree_set_data_file_path_none(d, index.row(), index.internalId());
}
const QString val(value.value<QString>());
return tree_set_data_file_path(d, index.row(), index.internalId(), val);
set = tree_set_data_file_path_none(d, index.row(), index.internalId());
} else
set = tree_set_data_file_path(d, index.row(), index.internalId(), value.value<QString>());
}
}
if (index.column() == 4) {
if (role == Qt::DisplayRole) {
if (!value.isValid()) {
return tree_set_data_file_size_none(d, index.row(), index.internalId());
}
return tree_set_data_file_size(d, index.row(), index.internalId(), value.value<quint64>());
set = tree_set_data_file_size_none(d, index.row(), index.internalId());
} else
set = tree_set_data_file_size(d, index.row(), index.internalId(), value.value<quint64>());
}
}
return false;
if (set) {
emit dataChanged(index, index, QVector<int>() << role);
}
return set;
}

View File

@ -539,6 +539,7 @@ QVariant %1::data(const QModelIndex &index, int role) const
bool %1::setData(const QModelIndex &index, const QVariant &value, int role)
{
)").arg(o.name);
cpp << " bool set = false;\n";
for (int col = 0; col < o.columnRoles.size(); ++col) {
if (!isWrite(o.columnRoles[col])) {
continue;
@ -556,22 +557,21 @@ bool %1::setData(const QModelIndex &index, const QVariant &value, int role)
test += " || value.isNull()";
}
cpp << " if (" << test << ") {\n";
cpp << QString(" return %1_set_data_%2_none(d%3);")
cpp << QString(" set = %1_set_data_%2_none(d%3);")
.arg(lcname, snakeCase(role.name), index) << endl;
cpp << " }\n";
cpp << " } else\n";
}
QString val = QString("value.value<%1>()").arg(role.type.name);
if (role.type.isComplex()) {
val = "val";
cpp << QString(" const %1 val(value.value<%1>());\n").arg(role.type.name);
}
cpp << QString(" return %1_set_data_%2(d%3, %4);")
cpp << QString(" set = %1_set_data_%2(d%3, %4);")
.arg(lcname, snakeCase(role.name), index, val) << endl;
cpp << " }\n";
}
cpp << " }\n";
}
cpp << R"( return false;
cpp << R"( if (set) {
emit dataChanged(index, index, QVector<int>() << role);
}
return set;
}
)";
}