首先,我想说的是,我的问题已经在此处关于SO和here it is进行了讨论。但是答案不是好答案...

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

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


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

谢谢!



PS:此问题在QTreeView类中不明显。使用QTreeView一切正常!

最佳答案

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

使用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;
}


如果我运行该应用程序并更改列宽,请退出该应用程序并再次运行它,则列宽将正确还原。

我和你有什么不同吗?

08-07 15:57