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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Checkbox-ы в QTableView как убрать?  (Прочитано 8047 раз)
alex-v
Гость
« : Март 11, 2011, 10:23 »

...было все ОК пока использовал стандартную модель QSqlTableModel.
Но когда я наследовал от неё свой класс, чтобы переопределить метод data(), то в ячейках таблицы вместе с текстом стали выводиться еще и чекбоксы Улыбающийся.
Как от них избавиться?

Код:
#ifndef ORDERSMODEL_H
#define ORDERSMODEL_H

#include <QSqlTableModel>

class OrdersModel : public QSqlTableModel
{
    Q_OBJECT
public:
    explicit OrdersModel(QObject *parent = 0);

private:
    QVariant data(const QModelIndex &item, int role=Qt::DisplayRole) const;
};

#endif // ORDERSMODEL_H

Код:
#include "OrdersModel.h"


OrdersModel::OrdersModel(QObject *parent) :
    QSqlTableModel(parent)
{
}
//---------------------------------------------------------------------

QVariant OrdersModel::data(const QModelIndex &item, int role) const
{
    return QString("test");
}
//---------------------------------------------------------------------

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 11, 2011, 10:29 »

Переопредели Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alex-v
Гость
« Ответ #2 : Март 11, 2011, 10:32 »

Пробовал.
Возвращаю отключённый флаг чекбокса - не помогло.

Код:
#include "OrdersModel.h"


OrdersModel::OrdersModel(QObject *parent) :
    QSqlTableModel(parent)
{
}
//---------------------------------------------------------------------

QVariant OrdersModel::data(const QModelIndex &item, int role) const
{
    return QString("test");
}
//---------------------------------------------------------------------

Qt::ItemFlags OrdersModel::flags(const QModelIndex &index) const
{
    return Qt::ItemIsEnabled;
}
//---------------------------------------------------------------------
« Последнее редактирование: Март 11, 2011, 10:35 от alex-v » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Март 11, 2011, 10:33 »

А, тьфу, в data обработай Qt::CheckStateRole
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alex-v
Гость
« Ответ #4 : Март 11, 2011, 10:55 »

точно. спасибо.

Еще бы одну проблемку решить - как заливать всю текущую строку синим фоном?
(раньше со стандартной моделью - работало. А теперь нет)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Март 11, 2011, 10:58 »

Qt::BackgroundColorRole, возможно. Вообще, почитай про роли.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alex-v
Гость
« Ответ #6 : Март 11, 2011, 11:03 »

Да. Читал.
Эту роль видел. Проблема в том - как определить в методе data() что ячейка находится в текущей строке...?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Март 11, 2011, 11:06 »

ЕМНИП, за окраску текущей ячейки отвечают вьюха или делегат.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Disaron
Гость
« Ответ #8 : Март 11, 2011, 23:46 »

На самом деле надо решить для себя, какую именно роль(и) надо переопределить. Для остального возвращать QSqlTableModel::data(item, role). Тогда лишнего переопределять не придется.
« Последнее редактирование: Март 11, 2011, 23:48 от Disaron » Записан
chu
Гость
« Ответ #9 : Март 12, 2011, 02:46 »

точно. спасибо.

Еще бы одну проблемку решить - как заливать всю текущую строку синим фоном?
(раньше со стандартной моделью - работало. А теперь нет)
м.б. так:
Код:
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
Записан
alex-v
Гость
« Ответ #10 : Март 12, 2011, 09:20 »

Да, всё получилось. Всем спасибо.
Текущая строка не выделялась из-за того, что я переопределил метод flags(). Убрал его - и всё ОК.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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