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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как разделить столбцы на под столбцы  (Прочитано 1830 раз)
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« : Май 10, 2019, 19:44 »

Отнаследовался от QAbstractTableModel и создал модель (отображение во вложении) , который отображает недельное расписание. Мне нужно разделить столбец на несколько под столбцов , как это сделать ?
Код:
#include "calendarmodel.h"
#include <QLocale>
#include <QBrush>
#include <QDebug>

CalendarModel::CalendarModel(QWidget *parent):QAbstractTableModel (parent)
{
    _inWorkTime.setHMS(8,0,0);
    _outWorkTime.setHMS(19,0,0);
    _date = QDate::currentDate();
     _firstDate = _date;
    setCalendarPage(_date.year(), _date.month());

}

void CalendarModel::setCalendarPage(int yoar, int mohth)
{
    beginResetModel();
    _firstDate = _firstDate.addDays(-_firstDate.dayOfWeek()+1);
    endResetModel();
}

int CalendarModel::rowCount(const QModelIndex &parent) const
{
    return (_outWorkTime.hour()-_inWorkTime.hour())+2;

}

int CalendarModel::columnCount(const QModelIndex &parent) const
{
    return 7;
}

QVariant CalendarModel::data(const QModelIndex &index, int role) const
{
    if(!index.isValid())
        return QVariant();
    switch (role) {
    case Qt::DisplayRole:

       // return headerData(index.row(),Qt::Horizontal, Qt::DisplayRole);
    case Qt::BackgroundRole:
        if(index.row()==0) return QBrush(QColor(220, 220, 220)); // цвет секции аудитории
        if(index.column()==5 || index.column()==6)  return QBrush(QColor(255, 199, 199));
         if(_date.toString("ddd.dd.MM") == headerData(index.column(),Qt::Horizontal, Qt::DisplayRole))
             return QBrush(QColor(255, 244, 158));

    }
    return QVariant();
}

QVariant CalendarModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if(orientation == Qt::Horizontal){
        switch (role) {
        case Qt::DisplayRole:
           return _firstDate.addDays(section).toString("ddd.dd.MM");

        case Qt::BackgroundRole:
            if(section % 2 == 0){
                return QBrush(QColor(255, 241, 133));
            }
            else return QBrush(QColor(252, 227, 38));
        }

    }
    if(orientation == Qt::Vertical){
        switch (role) {
        case Qt::DisplayRole:
            if(section==0)return "Ауд";
            return QString::number((_inWorkTime.hour()-1)+section)+":00";
        case Qt::BackgroundRole:
            if(section==0) return QBrush(QColor(220, 220, 220)); // цвет секции аудитории

        }

    }
    return QVariant();
}

Или помогите партировать HierarchicalHeaderView (https://store.kde.org/p/1132194/) для Qt5.7
« Последнее редактирование: Май 10, 2019, 22:29 от sektor » Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


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

Решил проблему скрыв колонки и вместо них нарисовал в моделе и объединил с помощью setSpan .
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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