5

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

所以,问题来了:我有一个QTableView类,有一个简单的model,与tableView->setModel(model);方法相连。例如,我有 4-5 列。我启动了我的项目应用程序,并对列宽进行了一些更改。按下退出后,我的项目应用程序将tableView->horizontalHeader()->saveState();数据状态保存QSettings到文件中。当我再次启动我的应用程序时,它会变成这样:

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

但是,什么也没有发生!列宽具有标准宽度。它们不会随着我存储的值而改变!:(

谢谢!


PS:这个问题在课堂上并不明显QTreeView。一切QTreeView正常!

4

1 回答 1

9

我试图重现您的问题,但对我来说一切正常。这是我所做的:

使用 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,我设置了ApplicationNameOrganizationNameOrganizationDomain

在我的表单的析构函数中,这是我写的:

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

    delete ui;
}

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

我做的和你有什么不同吗?

于 2010-09-10T06:18:53.587 回答