Pergunta

eu tenho um QTreeView subclasse (e QAbstractItemModel subclasse) que tem um bom cabeçalho horizontal. Eu gostaria de adicionar cabeçalhos verticais (descendo o lado esquerdo) para combinar. Mas diferente QTableView que possui vertical separado (setVerticalHeader()) e cabeçalhos horizontais (setHorizontalHeader()), QTreeView permite apenas um único cabeçalho (setHeader()).

Eu sei que posso apenas fingir que a coluna mais à esquerda é o cabeçalho e renderizá -la com uma cor diferente (não preciso da capacidade de redimensionar ou reorganizar as linhas, então não precisaria implementar nenhum desses comportamentos especiais ). Mas isso não leva em consideração os estilos locais. Por exemplo, no meu sistema, os cabeçalhos têm um leve gradiente, dando a eles uma aparência quase em 3D.

Portanto, estou procurando uma maneira de adicionar um cabeçalho vertical adequado (acho que seria uma subclasse de QHeaderView) ou então, tornando um cabeçalho na coluna mais à esquerda, mas a renderizando da maneira certa.

Foi útil?

Solução

Você provavelmente está certo de que você terá que "fingir", mas você poderá desenhá -lo para parecer tão bom quanto seus cabeçalhos horizontais.

O que você precisa fazer é estar no comando do paintEvent para essas células e, em seguida, use o estilo atual para desenhar um controle personalizado. Algo como:

//QWidget* w is the widget who's style you want
QPainter painter(this);
QStyleOptionHeader opt;
opt.initFrom(this);
opt.state = QStyle::State_None;
opt.orientation = Qt::Vertical;
opt.state |= QStyle::State_Vertical;
if (w->isEnabled())
    opt.state |= QStyle::State_Enabled;
opt.state |= QStyle::State_Active;
w->style()->drawControl(QStyle::CE_Header, &opt, &painter, w);

A maneira mais fácil de estar no comando de um evento de pintura para as células que você deseja seria criar um delegado de item personalizado e reimplementar o virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0 método. Você apenas alimenta sua pintura para os índices de quem se importa e passa o restante para a super classe (consulte os documentos do QT para esta classe).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top