如何使restoreState()和saveState()正确地工作到QTableView类?

mos*_*osg 4 qt restore save qtableview

首先,我想说,我的问题已经在这里讨论了,在SO上,就在这里.但答案不是好的......

所以,问题出在这里:我有一个QTableView类,一个简单的model,与tableView->setModel(model);方法相关的.例如,我有4-5列.我启动了我的项目应用程序并使用列宽进行了一些更改.按下Exit后,我的项目应用程序将tableView->horizontalHeader()->saveState();数据状态保存QSettings到文件.当我再次启动我的应用程序时,它会产生以下内容:

tableView->horizontalHeader()->restoreState(/* data from settings ini file */);
Run Code Online (Sandbox Code Playgroud)

但是,没有任何反应!列宽度具有标准宽度.它们不会随我的存储值而改变!:(

谢谢!


PS:这个问题在QTreeView课堂上并不明显.随着QTreeView一切都OK!

Jér*_*ôme 7

我试图重现你的问题,但一切都适合我.这是我做的:

使用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);
}
Run Code Online (Sandbox Code Playgroud)

(请注意,在我的main.cpp设置中,我设置了ApplicationName,OrganizationNameOrganizationDomain)

在我的形式的析构函数中,这是我写的:

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

    delete ui;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行应用程序并更改列宽,退出应用程序并再次运行它,则会正确恢复列宽.

我和你有什么不同吗?