crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> создание делегата для QTableView на основе QTextEdit
Steklova Olga
  опции профиля:
сообщение 2.4.2012, 15:21
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Всем привет! :)
У меня в БД FireBird есть следующая таблица:
CREATE TABLE T_MSG_VC(
    F_RECORD_NMB      D_INTEGER NOT NULL,
    F_MSG_TEXT_VC     VARCHAR(1000) NOT NULL
);
Хочу ее отобразить в QTableView.
Оператор должен иметь возможность просмотра таблицы, а редактирование данных должно быть запрещено.
Для этого мне, видимо, нужно создать делегат.
Посмотрите, пожалуйста, для моего случая достаточно того, что я написала?
delegate.h
#ifndef DELEGATE_H
#define DELEGATE_H

#include <QtGui/QItemDelegate>

class TextEditDelegate : public QItemDelegate
{
    Q_OBJECT

public:
    TextEditDelegate(QObject *parent = 0);

    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const;
};

#endif
delegate.cpp
#include <QtGui/QTextEdit>

#include "delegate.h"

TextEditDelegate::TextEditDelegate(QObject *parent)
    : QItemDelegate(parent)
{
}

QWidget *TextEditDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const
{
    QTextEdit *editor = new QTextEdit(parent);

    return editor;
}
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ...
    tableView = new QTableView();
    delegate = new TextEditDelegate();

    tableView->setItemDelegateForColumn(1, delegate);
    tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ...
}
...
Пока не говорю о размерах ячеек QTableView. Об этом позже... :)


Сообщение отредактировал Steklova Olga - 2.4.2012, 15:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Steklova Olga
  опции профиля:
сообщение 4.4.2012, 21:42
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Спасибо большое, Юрий, в общих чертах поняла! Ура! :clapping::D

Так как представление у меня редактировать не надо, то делегата для редактирования мне не нужно,
надо просто указать подходящий режим для представления:
tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
Жаль только, что он работает, по-моему, кривовато, что я предлагаю добить вот в этой теме
(05.04.2012 добили, делегат все-таки понадобился для отображения, в нем переопределен метод drawDisplay)

А когда мне понадобится редактировать данные в представлении, прямо на экране, то мне НЕ ПОМЕШАЕТ ПОЧИТАТЬ про делегаты подробно, а не просто бездумно списывать. :)

wiz29, спасибо за ссылку, но для редактирования поля типа VARCHAR(1000) делегат для строк как QLineEdit не очень-то подойдет, для этого нужен QTextEdit. Потому что неудобно редактировать такой длинный текст в одной строке.

Сообщение отредактировал Steklova Olga - 5.4.2012, 17:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 10:45