2010-12-14 6 views
0

Я использую QItemDelegate в сочетании с флажком IsUserCheckable QTableView, чтобы нарисовать центрированный столбец флажка. Все работает нормально, пока я не включил выбор строки для таблицы.Qt: Checkbox & QItemDelegate- не рисовать флажок при выборе

Когда выбор происходит, синий фон выбора - это единственное, что нарисовано, а флажки больше не видны.

Ниже приведен мой код, который я использую, чтобы нарисовать флажок внутри делегата.

void CheckboxDelegate::drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const 
{ 
    QSize size = check(option, option.rect, Qt::Checked).size(); 
    QRect checkboxRect = QStyle::alignedRect(option.direction, Qt::AlignCenter, size, option.rect); 
    QItemDelegate::drawCheck(painter, option, checkboxRect, state); 
} 

Любые идеи относительно того, почему это неправильно рисуется при выборе?

+1

Вам действительно нужно разместить больше кода. Я предполагаю, что ваш заказ испорчен, и вы рисуете синий фон ** после ** вы рисуете флажок – Robert

+0

Это единственный соответствующий код, который рисует что угодно. Я предполагаю, что проблема связана с порядком моей живописи, как вы упомянули, но я не уверен, как выполнить правильные шаги на этом этапе. Надеясь, кто-то может дать более глубокое понимание. – cweston

ответ

0

Трудно быть уверенным, что мой ответ поможет вам из-за отсутствия кода, который публикуется, но я думаю, что ваша проблема заключается в том, что художник не только рисует QRect, но также рисует QItemDelegate. Это означает, что, если вы конкретно не скажете, каков вам цвет QRect, он будет рисовать его таким же цветом, как и вся ячейка.

Если это правда, то ваш QRect по-прежнему существует, но имеет тот же цвет, что и остальная часть содержимого ячейки.

Вы можете изменить цвет художника для QRect делая painter.setPen(QColor.red);

Опять же, я не так много коды для работы прочь, но если вы хотите проверить, чтобы быть разным цветом, вам нужно установите его другим цветом.

Если вы предоставили больше кода, я мог бы ответить вам более четко.

+0

Конечно, я сделал это на Java (вы можете сделать то же самое в C++) – Ryan