首先,我想说,我的问题已在SO,和here it is进行了讨论。但答案不是好的......
所以,这是问题:我有一个QTableView
类,一个简单的model
,与tableView->setModel(model);
方法相关联。例如,我有4-5列。我启动了我的项目应用程序并使用列宽进行了一些更改。按下Exit后,我的项目应用程序将tableView->horizontalHeader()->saveState();
数据的状态保存为QSettings
到文件。当我再次启动我的应用程序时,它会产生这样的结果:
tableView->horizontalHeader()->restoreState(/* data from settings ini file */);
但是,没有任何反应!列宽度具有标准宽度。它们不会随我的存储值而改变! :(
谢谢!
PS:QTreeView
类不会出现此问题。使用QTreeView
一切正常!
答案 0 :(得分: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);
}
(请注意,在我的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;
}
如果我运行应用程序并更改列宽,退出应用程序并再次运行,则会正确恢复列宽。
我和你有什么不同吗?