HowTo hacer restoreState () y saveState () a la clase de trabajo correctlly QTableView?
-
01-10-2019 - |
Pregunta
En primer lugar, quería decir, que mi problema ya se discute aquí, el SO y aquí es . Pero las respuestas no son los buenos ...
Por lo tanto, aquí está la problema : Tengo una clase QTableView
, con un model
simple, conectada con el método tableView->setModel(model);
. Por ejemplo, tengo 4-5 columnas. Empecé mi solicitud de proyecto y de hecho algunos cambios con un ancho de columnas. Después presioné salida, mi aplicación proyecto SAVE estado de los datos tableView->horizontalHeader()->saveState();
con QSettings
a archivo. Y cuando se pone en marcha de nuevo mi aplicación, se hace algo como esto:
tableView->horizontalHeader()->restoreState(/* data from settings ini file */);
Sin embargo, no pasa nada! Las anchuras de las columnas tiene una anchura estándar. Ellos no se cambian con mis valores almacenados! : (
Gracias!
PD: Este problema no ponerse de manifiesto con la clase QTreeView
. Con QTreeView
todo está bien!
Solución
He intentado reproducir su problema, pero todo está funcionando bien para mí. Esto es lo que hice:
Con Qt Designer, me puso una QTableView
(llamado tbvTest
) en mi formulario.
En el constructor de mi forma, aquí es lo que he escrito:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tbvTest->setModel(new TableModel);
QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
QByteArray MyArray = MySetting.value("column_width", "").toByteArray();
ui->tbvTest->horizontalHeader()->restoreState(MyArray);
}
(nota que en mi main.cpp
, me puse la ApplicationName , OrganizationName y OrganizationDomain )
En el destructor de mi forma, aquí es lo que he escrito:
Widget::~Widget()
{
QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
MySetting.setValue("column_width", MyArray);
delete ui;
}
Si me quedo la aplicación y cambiar el ancho de columna, salir de la aplicación y ejecutarla de nuevo, los anchos de columna están correctamente restaurado.
¿Hay algo que estoy haciendo diferente de usted?