diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/itemviews/qitemdelegate.cpp | 7 | ||||
-rw-r--r-- | src/widgets/itemviews/qstyleditemdelegate.cpp | 7 |
2 files changed, 10 insertions, 4 deletions
diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index c040322ba1..3e34568a12 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -1295,8 +1295,11 @@ bool QItemDelegate::editorEvent(QEvent *event, return false; } - Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked - ? Qt::Unchecked : Qt::Checked); + Qt::CheckState state = static_cast<Qt::CheckState>(value.toInt()); + if (flags & Qt::ItemIsTristate) + state = ((Qt::CheckState)((state + 1) % 3)); + else + state = (state == Qt::Checked) ? Qt::Unchecked : Qt::Checked; return model->setData(index, state, Qt::CheckStateRole); } diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index 7e1933ad1e..c1fa9fe28e 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -764,8 +764,11 @@ bool QStyledItemDelegate::editorEvent(QEvent *event, return false; } - Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked - ? Qt::Unchecked : Qt::Checked); + Qt::CheckState state = static_cast<Qt::CheckState>(value.toInt()); + if (flags & Qt::ItemIsTristate) + state = ((Qt::CheckState)((state + 1) % 3)); + else + state = (state == Qt::Checked) ? Qt::Unchecked : Qt::Checked; return model->setData(index, state, Qt::CheckStateRole); } |