diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-03 16:14:48 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2014-05-03 22:38:33 +0200 |
| commit | 13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8 (patch) | |
| tree | 98a325d0e547d5da0b0fd4b0b9ce2054306e87d0 /gui_item_delegate.cpp | |
| parent | 5bf919190e90b017ff00ab074bce68e90958fa3c (diff) | |
| download | generic-gui-13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8.tar.gz generic-gui-13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8.tar.bz2 generic-gui-13cfd05f9b2bb3c8d7d1bf47fcef037a745bacf8.zip | |
Adds editing functionality to the models.
no longer able to store QStrings in the model though, But when creating generic guis you should not use any Gui related types anyway.
Diffstat (limited to 'gui_item_delegate.cpp')
| -rw-r--r-- | gui_item_delegate.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gui_item_delegate.cpp b/gui_item_delegate.cpp index aba0727..7527020 100644 --- a/gui_item_delegate.cpp +++ b/gui_item_delegate.cpp @@ -2,11 +2,40 @@ #include "gui_item_delegate.hpp" +#include <QMetaProperty> +#include <iostream> + GuiItemDelegate::GuiItemDelegate(QObject *parent) : QStyledItemDelegate(parent) { } +void GuiItemDelegate::setModelData(QWidget* widget, QAbstractItemModel* model, const QModelIndex& index) const +{ + static int string_id = qMetaTypeId<std::string>(); + QByteArray n = widget->metaObject()->userProperty().name(); + QVariant variant = widget->property(n); + + if(variant.type() == QVariant::String) { + model->setData(index, QVariant::fromValue(variant.toString().toStdString()), Qt::EditRole); + } else { + QStyledItemDelegate::setModelData(widget, model, index); + } +} + +void GuiItemDelegate::setEditorData(QWidget* widget, const QModelIndex& index) const +{ + static int string_id = qMetaTypeId<std::string>(); + QVariant variant = index.data(Qt::EditRole); + QByteArray n = widget->metaObject()->userProperty().name(); + + if(string_id == variant.userType()) { + widget->setProperty(n, QVariant(QString::fromStdString(variant.value<std::string>()))); + } else { + QStyledItemDelegate::setEditorData(widget, index); + } +} + QString GuiItemDelegate::displayText(const QVariant &value, const QLocale &locale) const { QString ret; |
