Russian Qt Forum

Qt => Вопросы новичков => Тема начата: sektor от Май 10, 2019, 19:44



Название: Как разделить столбцы на под столбцы
Отправлено: sektor от Май 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/ (https://store.kde.org/p/1132194/)) для Qt5.7


Название: Re: Как разделить столбцы на под столбцы
Отправлено: sektor от Май 11, 2019, 13:10
Решил проблему скрыв колонки и вместо них нарисовал в моделе и объединил с помощью setSpan .