Qt QTableView-выравнивание флажка при использовании IsUserCheckable

Я использую флаг флажка QTableView Qt:: ItemIsUserCheckable для отображения флажка в ячейке таблицы.

после прочтения некоторых вещей по выравниванию в попытке центрировать флажок в ячейке, я возвращаю Qt:: AlignCenter как TextAlignmentRole из функции models data ().

QVariant ExampleModel::data(const QModelIndex &index, int role) const 
{
  if(!index.isValid())
     return QVariant();

  if (role == Qt::TextAlignmentRole) 
       return Qt::AlignCenter | Qt::AlignVCenter;
}

это, однако, не выравнивает мой флажок.

кто-нибудь знает, как выровнять флажки это режим?

4 ответов


после дальнейшего исследования параметров делегата я нашел хорошую ссылку (К сожалению, больше не доступен) и придумал следующий гибрид, используя QItemDelegate и IsUserCheckable.

по сути, вам нужно расширить QItemDelegate, и переопределить, используя drawCheck функция для центровки и использования editorEvent для обработки событий мыши и клавиатуры при настройке модели с соответствующим государство.

void drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const

и

bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)

Также см. Этот же вопрос здесь...


вероятно, не тот ответ, который вы ищете, однако мне было намного проще реализовать свой собственный делегат элемента флажка при использовании qtableviews.


TextAlignmentRole действительно означает то, что он говорит. К сожалению, как вы, вероятно, заметили, нет никакой роли выравнивания значков/виджетов вообще.

сообщение об ошибке:http://bugreports.qt-project.org/browse/QTBUG-9047

тот же вопрос с некоторыми ответами: http://lists.trolltech.com/qt-interest/2006-06/msg00476.html


также вы можете посмотреть на этой ветке: http://www.qtcentre.org/threads/19157-QTableView-checkbox-center-with-stylesheet?p=181413#post181413