Как заставить restoreState () и saveState () корректно работать с классом QTableView? - PullRequest
4 голосов
/ 07 сентября 2010

Прежде всего, я хотел сказать, что моя проблема уже обсуждалась здесь, на SO, и здесь это . Но ответы не хорошие ...

Итак, вот проблема : у меня есть класс QTableView с простым model, связанным с методом tableView->setModel(model);. Например, у меня есть 4-5 столбцов. Я запустил приложение проекта и внес некоторые изменения в ширину столбцов. После того как я нажал Exit, мое приложение проекта сохранило состояние данных tableView->horizontalHeader()->saveState(); с QSettings в файл. И когда я снова запускаю свое приложение, оно выглядит примерно так:

tableView->horizontalHeader()->restoreState(/* data from settings ini file */);

Но ничего не происходит! Ширина столбцов имеет стандартную ширину. Они не меняются с моими сохраненными значениями! (

Спасибо!


PS: Эта проблема не становится очевидной с QTreeView классом. С QTreeView все ок!

1 Ответ

7 голосов
/ 10 сентября 2010

Я пытался воспроизвести вашу проблему, но у меня все работает нормально. Вот что я сделал:

С помощью Qt-Designer я поместил QTableView (с именем tbvTest) в мою форму.

В конструкторе моей формы вот что я написал:

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);
}

(обратите внимание, что в моем main.cpp я установил ApplicationName , OrganizationName и OrganizationDomain )

В деструкторе моей формы вот что я написал:

Widget::~Widget()
{
    QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
    QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
    MySetting.setValue("column_width", MyArray);

    delete ui;
}

Если я запускаю приложение и изменяю ширину столбца, закрываю приложение и запускаю его снова, ширина столбца восстанавливается правильно.

Я чем-то отличаюсь от вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...