2010-12-09 21 views
8

Estoy usando la casilla de casilla de QTableView de Qt :: ItemIsUserCheckable para mostrar una casilla de verificación en una celda de la tabla.Qt QTableView - Alineación de la casilla de verificación al usar IsUserCheckable

Después de leer algunas cosas sobre la alineación en un intento de centrar la casilla de verificación dentro de la celda, estoy devolviendo el Qt :: AlignCenter como TextAlignmentRole de la función de datos de los modelos().

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

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

Sin embargo, esto no está alineando mi casilla de verificación.

¿Alguien sabe cómo alinear casillas de verificación es este modo?

Respuesta

3

Después de investigaciones adicionales en las opciones de delegado he encontrado una buena referencia (por desgracia ya no está disponible) y se acercó con los híbridos siguientes utilizando un QItemDelegate y IsUserCheckable.

Esencialmente, es necesario extender QItemDelegate y reimplementar, utilizando la función drawCheck al centro y usar el editorEvent para controlar los eventos de ratón y teclado mientras ajusta el modelo con el estado apropiado.

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

y

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

Véase también esta pregunta similar here ...

+0

2 de los enlaces que se rompen –

2

Probablemente no sea la respuesta que está buscando, sin embargo, me resultó mucho más fácil implementar mi propio delegado de elementos de casilla al usar qtableviews.

Cuestiones relacionadas