2017-02-11 11 views
0

У меня довольно специфическая проблема с раскраской строк для QTableView, основная проблема заключается в окрашивании всего фона строки, но также использовании делегатов в разных столбцах, вот что я пробовал:Qt - цвет строки QTableview с делегатами

  • Реализация data() модели пользовательских данных: проблемы с этой реализацией является то, что фон пользовательских делегатов (для столбцов) не изменяется, когда окраска происходит.
  • Внедрение QStyledItemDelegate для строки, этот метод отлично подходит для раскраски, проблема в том, что я не могу назначить каких-либо других делегатов столбцов для этой конкретной строки.
  • Внесите QStyledItemDelegate для столбца, а художник заполняет rectangle всей строки, это кажется почти правильным для меня, все столбцы окрашены, проблема в том, что при изменении размера я получал обрезку и время от времени, цвет фона исчезает на других столбцах, снимок экрана ниже.

Picture when the colors are working

Picture after resizing, after clipping, it sometimes stops to this, can be fixed by defocusing the main window (click outside of it), accessing the context menu and other things like that

Дело в том, что некоторые столбцы использовать редактор по умолчанию/делегата, а некоторые используют пользовательский.

Вопрос в том, что было бы лучшим способом реализовать это?

Или я могу нарисовать всю строку и ограничить другие делегаты перекраской их фона?

+0

Возможно, вам следует показать свою реализацию вашей модели. – drescherjm

+0

Есть ли причина, по которой вы работаете с делегатом, а не с моделью? – RobbieE

+0

Я работаю с делегатом, потому что при моделировании с моделью он не окрашивает фон других делегатов (например, CombBox для столбца), как упоминалось в первой маркерной точке. – Lex

ответ

0

мне удалось найти решение:

Моя главная проблема, что мои делегаты не принимают цвет фона от модели, чтобы нарисовать его, я установил, копируя реализацию фона от QItemDelegate реализация, сниппет, что мне нужно реализовать в paint() метод моего пользовательского делегата это:

// draw the background color 
if (option.showDecorationSelected && (option.state & QStyle::State_Selected)) { 
    QPalette::ColorGroup cg = option.state & QStyle::State_Enabled 
           ? QPalette::Normal : QPalette::Disabled; 
    painter->fillRect(option.rect, option.palette.brush(cg, QPalette::Highlight)); 
} else { 
    QVariant value = index.data(Qt::BackgroundColorRole); 
    if (value.isValid() && qvariant_cast<QColor>(value).isValid()) 
     painter->fillRect(option.rect, qvariant_cast<QColor>(value)); 
} 

с этим, я теперь могу взять цвет из модели и краски фона делегата.

Смежные вопросы