【问题标题】:HowTo make restoreState() and saveState() work correctlly to QTableView class?如何使 restoreState() 和 saveState() 对 QTableView 类正常工作?
【发布时间】:2010-09-07 08:26:27
【问题描述】:

首先,我想说的是,我的问题已经在这里、在 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 一切正常!

【问题讨论】:

  • restoreState() 返回 true 或 false 以指示它是否成功。你的返回是真的吗?
  • @Arnold Spence 用我所有的QTableViewQTreeView 做restoreState() 时我得到了true 值...
  • 在您的启动中,您何时调用 restoreState()?一些简短的搜索似乎表明您希望等到应用程序完成启动并初始化所有内容。作为一个实验,您可以尝试在应用程序中添加一个按钮或菜单,以便在应用程序运行后调用恢复,看看它是否有效。
  • @Arnold 嗯,我仍然认为这只是 QTableView 基类问题 - Qt 错误。因为,我尝试使用简单的 Qt 演示示例(使用 QTableViews)来恢复状态,但仍然没有运气。我不想在我的项目中添加额外的代码,因为我认为基本的 Qt 功能(保存/恢复标题状态)必须正常工作!但我会再尝试一个示例,在程序运行时从内存中保存/恢复标头设置..
  • 内存 saveState/restoreState 方法有效!..

标签: qt save restore qtableview


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的出色回答,我会尽快尝试您的示例。我做了所有相同的东西,但有点复杂。等我得到成功的结果后,这里再提一下!
  • 回答问题,因为我答应了! %)
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
相关资源
最近更新 更多