Russian Qt Forum
Сентябрь 30, 2024, 10:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView + делегат  (Прочитано 3319 раз)
INZER
Гость
« : Июнь 20, 2013, 11:00 »

День добрый,
Не могу догнать где затупил помогите плиззз

Код:
QTableView * tvGU;
GroundUserSqlModel modelGU;

Модель:
Код:
class GroundUserSqlModel: public QSqlQueryModel
{
    Q_OBJECT
public:
    GroundUserSqlModel (QObject * parent=0);
    QVariant data (const QModelIndex &item, int role) const
    {
        QVariant value = QSqlQueryModel::data(item,role);
        if (role == Qt::DisplayRole && item.column()==2) // отображение данных в таблице
        {
            switch (value.toInt())
            {
            case 1:
                value = QVariant(QString::fromLocal8Bit("DSP"));
                break;
            case 2:
                value = QVariant(QString::fromLocal8Bit("УВД"));
                break;
            case 3:
                value = QVariant(QString::fromLocal8Bit("Авиакомпания"));
                break;
            default:
                break;
            }
        }
        return value;
    }
};

Делегат:
Код:
class GUDelegate: public QStyledItemDelegate
{
    Q_OBJECT
public:
    GUDelegate (QObject *p = 0): QStyledItemDelegate(p) {}
protected:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        QStyledItemDelegate::paint(painter,option,index);
    }
    QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        QLineEdit * edit = new QLineEdit(parent);
        return edit;
    }
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
    {
        QStyledItemDelegate::setModelData(editor,model,index);
    }
};

Конструктор:
Код:
    ui->tvGU->setModel(&modelGU);
    ui->tvGU->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tvGU->setItemDelegate(new GUDelegate (ui->tvGU));
    ui->tvGU->setEditTriggers(QAbstractItemView::DoubleClicked);

Однако при двойном клике по полю таблицы QLineEdit (поле редактрования) не появляется. Что я забыл?
Записан
INZER
Гость
« Ответ #1 : Июнь 20, 2013, 13:15 »

Немного поэкспериментрировал заменил QSqlQueryModel на QStandardItemModel и все заработало без изменения остального кода (кроме ручного заполнения модели).
С чем это может быть связано? Неужели нельзя редактировать QTableView, построенную на основе модели QSqlQueryModel?
Не хочется менять QSqlQueryModel на QSqlQuery + QStandardItemModel.
Записан
dio
Гость
« Ответ #2 : Июнь 20, 2013, 13:35 »

Данная модель только для чтения.

Цитировать
The QSqlQueryModel class provides a read-only data model for SQL result sets.

http://qt-project.org/doc/qt-5.0/qtsql/qsqlquerymodel.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.228 секунд. Запросов: 21.