Pregunta

Estoy trabajando con una interfaz gráfica de usuario QT. Me estoy poniendo en práctica un control de edición sencilla utilizando un hexagonal QTableView. Mi idea inicial es utilizar una tabla con columnas de diecisiete. Cada fila de la tabla tendrá 16 bytes hexadecimales y luego una representación ASCII de los datos en la columna XVII. Idealmente, me gustaría editar / configurar el estilo de la columna XVII no tener líneas en la parte superior e inferior de cada celda para dar al texto una apariencia de flujo libre. ¿Cuál es la mejor manera de abordar esto con el QTableView?

¿Fue útil?

Solución

Yo podría pensar en un par de maneras de hacer lo que necesita; tanto incluiría dibujo de cuadrícula personalizada ya que parece que no hay una manera directa de enganchar a la red de rutina de la clase QTableView pintura:

1.Apague la red estándar para la cuadrícula de árbol llamando setShowGrid (falso) y dibujar líneas de la cuadrícula de células que los necesitan usar delegado artículo. A continuación se muestra un ejemplo:

// custom item delegate to draw grid lines around cells
class CustomDelegate : public QStyledItemDelegate
{
public:
    CustomDelegate(QTableView* tableView);
protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
private:
    QPen _gridPen;
};

CustomDelegate::CustomDelegate(QTableView* tableView)
{
    // create grid pen
    int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());
    QColor gridColor = static_cast<QRgb>(gridHint);
    _gridPen = QPen(gridColor, 0, tableView->gridStyle());
}

void CustomDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    QStyledItemDelegate::paint(painter, option, index);

    QPen oldPen = painter->pen();
    painter->setPen(_gridPen);

    // paint vertical lines
    painter->drawLine(option.rect.topRight(), option.rect.bottomRight());
    // paint horizontal lines 
    if (index.column()!=1) //<-- check if column need horizontal grid lines
        painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());

    painter->setPen(oldPen);
}

// set up for your tree view:
ui->tableView->setShowGrid(false);
ui->tableView->setItemDelegate(new CustomDelegate(ui->tableView));
método

2.Crear un QTableView descendiente y anular el paintEvent . Hay que o bien podría llamar su propia red o de dejar que la clase base para dibujar y luego pintar las líneas horizontales en la parte superior de la parrilla con el uso de color de fondo de tableview.

Espero que esta ayuda, respecto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top