HowTo hacer restoreState () y saveState () a la clase de trabajo correctlly QTableView?

StackOverflow https://stackoverflow.com/questions/3656978

  •  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!

¿Fue útil?

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?

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