Russian Qt Forum
Июня 17, 2025, 13:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Произвольная строка в QTableView  (Прочитано 11228 раз)
radislav72
Гость
« Ответ #15 : Ноября 19, 2010, 12:44 »

Тут кое-что получилось. Если кому интересно.
От идеи с UNION в запросе отказался- логику запроса портит, не понравилось. Пришлось создавать производній класс. Оказывается, новая строка появляется при простом переопределении метода rowCount:
Код:
int FileDepositesModel::rowCount (const QModelIndex & parent) const
{
    if (parent.isValid()) return 0;
    return QSqlQueryModel::rowCount(parent) + 1;
}

После этого в таблице автоматом появляется пустая строка. Дальше, как уже укзывали раньше, в методе data форматируем последнюю строчку. Типа
Код:
QVariant FileDepositesModel::data(const QModelIndex &index, int role) const
{
    QVariant value = QSqlQueryModel::data(index, role);

    switch (role)
    {
    case Qt::DisplayRole:
        if (index.row() == this->rowCount()-1)
        {
            if (index.column() == fldTotal) return tr_::total; else
                if (index.column() == fldSumm)
                {
                QString s;
                s.setNum(summ, 'f', 2);
                return s;
            }
        }
        break;
    case Qt::BackgroundColorRole:
        {
            if (index.row() == rowCount() - 1) return qVariantFromValue(QColor(224, 255, 193));
            else return value;
        }
    case Qt::FontRole:
        if (index.row() == rowCount() - 1)
        {
            QFont fnt = QFont(qvariant_cast<QFont>(value));
            fnt.setBold(true);
            return qVariantFromValue(fnt);
        }
        else return value;
        break;
    }
    return value;
}

Общий вид такого TableView'а на рисунке:


Только еще вопрос появился: как убрать номер строки (в заголовке) для этой последней итоговой строки? На рисунке этот номер выделен красным кругом.

Буду рад за замечания. (И спасибо всем за советы Улыбающийся)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #16 : Ноября 19, 2010, 13:03 »

Переопределить headerData
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
radislav72
Гость
« Ответ #17 : Ноября 19, 2010, 14:40 »

Переопределить headerData

Спасибо. Но у меня ситуация: заголовки для колонок уже заданы вызовом setHeaderData. Если же потом переопределить headerData, то все заданные раньше заголовки колонок исчезают. Или я что-то неправильно делаю:
Код:
if (orientation == Qt::Vertical)
    {
        switch (role)
        {
        case Qt::DisplayRole:
            if (section == rowCount() - 1) return ""; else return section;
            break;
        }
    }
    return QVariant();
Можно ли, чтобы для колонок оставались ранее заданные значения? Если да, то как? Что нужно возвращать вместо QVariant(), чтобы остались старые названия?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #18 : Ноября 19, 2010, 14:51 »

Попробуй QAbstractTableModel::headerData (section, orientation, role).
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
radislav72
Гость
« Ответ #19 : Ноября 19, 2010, 14:53 »

Попробуй QAbstractTableModel::headerData (section, orientation, role).
Пробовал, тогда вместо старых заголовков ставятся цифры: 0,1,2...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #20 : Ноября 19, 2010, 14:56 »

А setHeaderData ты не переопределял?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
radislav72
Гость
« Ответ #21 : Ноября 19, 2010, 15:39 »

А setHeaderData ты не переопределял?
Нет.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #22 : Ноября 19, 2010, 15:48 »

Ну переопредели и храни заголовки у себя в классе.
Записан

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

Ясно, спасибо. С этим проблем конечно нет.

Короче, вопрос решился Улыбающийся
« Последнее редактирование: Ноября 19, 2010, 15:53 от radislav72 » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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