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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlRelationalTableModel и QTableView  (Прочитано 4538 раз)
rarom
Гость
« : Май 12, 2010, 12:16 »

Из таблицы Mysql базы данных строится модель и потом выводится в QTableView. При этом ничего в базе данных редактировать не требуется. Требуется только отображать.
А вопрос такой:
В одной колонке бд хранится значение типа bool (0 или 1) и мне требуется вместо 0 или 1 выводить в QTableView текстом фразу в колонку, заменяя эти 0 и 1 соотвественно в одном случае(0) одну, в другом случае(1) другую. В данный момент выводится или 0 или 1 Как это реализовать, подскажите пожалуйста, буду благодарен ?
« Последнее редактирование: Май 12, 2010, 12:21 от rarom » Записан
crossly
Гость
« Ответ #1 : Май 12, 2010, 12:22 »

если редактировать не нужно используй QSqlQueryModel.... решения 2.... 1.унаследоватся и переопределить метод data .... 2. Использовать делегат
Записан
rarom
Гость
« Ответ #2 : Май 12, 2010, 12:24 »

если редактировать не нужно используй QSqlQueryModel.... решения 2.... 1.унаследоватся и переопределить метод data .... 2. Использовать делегат

Спасибо за ответ.
А можно пример пожалуйста.
Записан
crossly
Гость
« Ответ #3 : Май 12, 2010, 12:24 »

пример чего??
Записан
rarom
Гость
« Ответ #4 : Май 12, 2010, 19:27 »

Не знаком еще с делегатами... Гуглил\смотрел стандартные примеры..не совсем понял
Вот допустим пример делегата, который выравнивает по центру

Код:
class Delegate: public QStyledItemDelegate {
        int aFlags;
public:
        Delegate( int flags ) :
                aFlags( Qt::AlignVCenter | flags ) {
        }

        void paint( QPainter* p, const QStyleOptionViewItem& o, const QModelIndex& i ) const {
                Q_ASSERT( i.isValid() );

                QStyleOptionViewItemV4 opt = o;
                initStyleOption( &opt, i );
                opt.displayAlignment = (Qt::Alignment) aFlags;

                QStyle *style = QApplication::style();
                style->drawControl( QStyle::CE_ItemViewItem, &opt, p, NULL );
        }
};

Применил ( ui->booksView->setItemDelegateForColumn( 6, new Delegate() ); ) работает.

Как я понимаю мне нужно


class Delegate : public QItemDelegate {
public:

....


и переопределить метод setEditorData
Записан
crossly
Гость
« Ответ #5 : Май 12, 2010, 19:51 »

нет... достаточно paint (вам же только для отображения).... смотрите i.data().toInt().... и в зависимости от значения рисуете нужный текст
Записан
rarom
Гость
« Ответ #6 : Май 12, 2010, 23:45 »

Спасибо. Разобрался.
Вот что получилось:
Код:
class place2text_delegate: public QItemDelegate {
public:
    void paint( QPainter* p, const QStyleOptionViewItem& o, const QModelIndex& i ) const {
            Q_ASSERT( i.isValid() );

            if( i.data().toInt() == 0 ){
                QString text = QString(tr("В библиотеке"));
                drawDisplay(p, o, o.rect, text);
            }
            else if( i.data().toInt() == 1){
                QString text = QString(tr("У студента"));
                drawDisplay(p, o, o.rect, text);
            }
            else{
                QString text = QString(tr("Неверные данные в БД"));
                drawDisplay(p, o, o.rect, text);
            }
            drawFocus(p, o, o.rect);
    }

};

Код:
ui->booksView->setItemDelegateForColumn( 6, new place2text_delegate() );
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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