2010-12-09 4 views
8

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

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

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

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

Это, однако, не соответствует моему флажку.

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

ответ

3

После дальнейшего расследования вариантов делегированного я нашел хорошую ссылку (к сожалению, больше не доступны) и придумал следующий гибрид с использованием 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) 

Также см этот же вопрос here ...

+0

2 ссылок сломаны – 2015-08-24 17:29:05

2

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

2

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

Отчет об ошибке: http://bugreports.qt-project.org/browse/QTBUG-9047

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

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