如何使restoreState()和saveState()对QTableView类正确工作?
首先,我想说,我的问题已经在这里讨论过了,等等。但答案不是好的 因此,这里是问题:我有一个如何使restoreState()和saveState()对QTableView类正确工作?,qt,save,restore,qtableview,Qt,Save,Restore,Qtableview,首先,我想说,我的问题已经在这里讨论过了,等等。但答案不是好的 因此,这里是问题:我有一个QTableView类,有一个简单的模型,与tableView->setModel(model)连接方法。例如,我有4-5列。我启动了我的项目应用程序,并对列宽进行了一些更改。按下退出键后,我的项目应用程序保存了tableView->horizontalHeader()->saveState()的状态数据与QSettings一起归档。当我再次启动我的应用程序时,它会产生如下结果: tableView->
QTableView
类,有一个简单的模型
,与tableView->setModel(model)连接代码>方法。例如,我有4-5列。我启动了我的项目应用程序,并对列宽进行了一些更改。按下退出键后,我的项目应用程序保存了tableView->horizontalHeader()->saveState()的状态代码>数据与QSettings
一起归档。当我再次启动我的应用程序时,它会产生如下结果:
tableView->horizontalHeader()->restoreState(/* data from settings ini file */);
但是,什么也没发生!列宽具有标准宽度。它们不会使用我的存储值进行更改!:(
谢谢
PS:QTreeViewQTreeView
类中的问题并不明显。使用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);
}
Widget::~Widget()
{
QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
MySetting.setValue("column_width", MyArray);
delete ui;
}
(请注意,在mymain.cpp
中,我设置了,和)
在我表单的析构函数中,我写了以下内容:
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);
}
Widget::~Widget()
{
QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
MySetting.setValue("column_width", MyArray);
delete ui;
}
如果我运行应用程序并更改列宽,退出应用程序并再次运行,列宽将正确恢复
我做的事情与你有什么不同吗?restoreState()返回true或false以表明它是否成功。你的返回true吗?@Arnold Spence带着我所有的QTableView
和QTreeView
,我在执行restoreState()时得到了true值……在你启动时,你是在调用restoreState()吗?一些简短的搜索似乎建议您等待应用程序完成启动和初始化所有内容。作为一个实验,您可以尝试在应用程序运行后添加一个按钮或菜单来调用还原,看看是否有效。@Arnold Hm,我仍然认为这只是QTableView
基类问题-Qt错误。因为,我试图用简单的Qt演示示例(使用qtableview)恢复状态,但仍然没有成功。我不想向我的项目中添加额外的代码,因为,我认为基本的Qt功能(保存/恢复头状态)必须正确工作!但我将尝试另一个示例,在程序运行时从内存中保存/还原头设置..内存保存状态/恢复状态方法有效!。感谢您的回答,我将尽快尝试您的示例。我做了所有相同的事情,但有点复杂。在获得成功结果后,我将在这里提到它!回答问题,因为我已经答应了!%)