Mostrando una columna QtableView oculta
-
28-10-2019 - |
Pregunta
Estoy tratando de hacer algo que parece que debería ser muy simple, pero cuanto más lo miro, me pregunto si es un error QT.
Entonces, tengo un QTableView
Eso tiene columnas que se pueden mostrar/ocultar como le gusta al usuario. Después de inicializar la tabla, llamo a un personalizado restoreColumns()
método que oculta las columnas (usando QTableView::hideColumn()
) que el usuario había ocultado la última vez que la GUI estaba abierta.
El problema se produce cuando el usuario intenta mostrar las columnas que estaban ocultas por el usuario la última vez que se ejecutó la GUI. La señal/ranura apropiada se llama y se ejecuta, pero por alguna razón el QTableView
no se actualiza para mostrar la columna.
Lo extraño es que cualquier columna que ya se muestre (no estaba oculta por el usuario la última vez que se ejecutó la GUI) no tiene problemas para ocultar/mostrar.
¿Alguna idea? ¡Gracias!
Así es como inicializo la mesa ...
m_tableModel = new mytablemodel();
m_tableView = new mytableview();
m_tableView->setItemDelegate(m_tableDelegate);
m_tableView->setModel(m_tableModel);
Método Meat of Restorecolumns ():
for (int i=0; i<horizontalHeader()->count(); i++) {
// load size to restore previous width
...
horizontalHeader()->resizeSection(i, width); // restore width
// load previous column position
...
// restore column order
int currentVisualIndex = horizontalHeader()->visualIndex(i);
if (currentVisualIndex != visualIndex)
horizontalHeader()->moveSection(currentVisualIndex, visualIndex);
// load previous hidden/shown state
...
if (columnHidden) {
hideColumn(i);
} else {
showColumn(i);
}
}
A continuación se muestra algún código de muestra para mostrar/ocultar una de las columnas.
void mytableview::showAColumn(bool checked) {
// mytableview is a subclass of qtableview
if (checked)
showColumn(COLUMN_A); // COLUMN_A is an enum for the column
else
hideColumn(COLUMN_A);
}
Que está conectado a un QAction
que se puede acceder desde el menú y el menú contextual del QHeaderView
del QTableView
.
connect(action, SIGNAL(toggled(bool)), this, SLOT(showAColumn(bool)));
Solución
Cuando está cargando el ancho anterior de las columnas ocultas, el ancho que se guardó era 0.
Entonces, al cambiar el tamaño de la columna, asegúrese de que el ancho sea mayor que 0.
Haga esto y luego las columnas se mostrarán/se esconderán como se esperaba.