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

发布于 2024-09-17 19:49:49 字数 731 浏览 16 评论 0原文

首先,我想说,我的问题已经在这里讨论过,在 这里是的。但答案并不是好的......

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

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

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

谢谢!


PS:这个问题在 QTreeView 类中不会变得明显。使用 QTreeView 一切都可以!

First of all, I wanted to say, that my problem was already discuss here, on SO, and here it is. But the answers are not the good ones...

So, here is the problem: I have a QTableView class, with a simple model, connected with tableView->setModel(model); method. For example, I have 4-5 columns. I started up my project application and made some changes with columns width. After I pressed Exit, my project app save state of the tableView->horizontalHeader()->saveState(); data with QSettings to file. And when I starts up my app again, it makes something like this:

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

But, nothing happens! The columns widths has standard width. They are not changed with my stored values! :(

Thanks!


PS: This problem not become apparent with QTreeView class. With QTreeView all is ok!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如梦亦如幻 2024-09-24 19:49:49

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

使用 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 中,我设置了 应用程序名称, OrganizationNameOrganizationDomain

在我的析构函数中表单,这是我写的:

Widget::~Widget()
{
    QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
    QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
    MySetting.setValue("column_width", MyArray);

    delete ui;
}

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

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

I tried to reproduce your problem, but everything is working fine for me. Here is what I did :

With Qt-Designer, I put a QTableView (named tbvTest) on my form.

In the constructor of my form, here is what I've written :

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

(note that in my main.cpp, I set the ApplicationName, OrganizationName and OrganizationDomain)

In the destructor of my form, here is what I've written :

Widget::~Widget()
{
    QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
    QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
    MySetting.setValue("column_width", MyArray);

    delete ui;
}

If I run the application and change the column width, quit the app and run it again, the column widths are correctly restored.

Is there something I'm doing different from you ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文