代码之家  ›  专栏  ›  技术社区  ›  mosg

如何使restoreState()和saveState()对QTableView类正确工作?

  •  4
  • mosg  · 技术社区  · 14 年前

    首先,我想说,我的问题已经在这里讨论了,等等,还有 here it is . 但答案不是好的。。。

    所以,这里是 问题 :我有一个 QTableView 类,用一个简单的 model tableView->setModel(model); 方法。例如,我有4-5列。我启动了我的项目应用程序,并对列宽做了一些更改。在我按下退出按钮后,我的项目应用程序保存 tableView->horizontalHeader()->saveState(); QSettings 归档。当我再次启动我的应用程序时,它会这样:

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

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


    附言:这个问题不明显 QTreeView QTreeView公司 一切都好!

    1 回复  |  直到 7 年前
        1
  •  8
  •   Jérôme    14 年前

    我试图重现你的问题,但一切都很顺利。以下是我所做的:

    在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;
    }
    

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

    我在做什么和你不一样的事吗?