gpt4 book ai didi

qt - 从 QHeaderView saveState/restoreState 中排除移动的列顺序

转载 作者:行者123 更新时间:2023-12-04 18:41:40 24 4
gpt4 key购买 nike

QHeaderView 的 saveState/restoreState 有问题。我的应用程序中有几个 QTableViews。 QTableView 保存并恢复它的 QHeaderView 设置,但对于某些 QTableView,我想将移动的部分顺序从 beeing 中排除到 ini 文件中。

这意味着,saveState 应该保存已排序的列、排序指示符、列宽,但如果用户移动了列,则不会。

有没有办法不保存移动的列?

谢谢。

问候,摩尼

最佳答案

没有简单的方法可以做到这一点。我建议接下来这样:

使用 vector 存储移动 header 的 logicalIndexes

QVector<int> last;

使用sectionMoved 信号检测移动并将logicalIndex 存储在向量中:

connect( ui->tableView->horizontalHeader(),static_cast<void (QHeaderView::*)(int,int,int)>(&QHeaderView::sectionMoved),[=](int logicalIndex, int oldVisualIndex, int newVisualIndex)
{//with lambda
//you can also provide shecking is current logicalIdnex already exist in vector
last.push_back(logicalIndex);
});

语法如此复杂丑陋是因为QHeaderView中还有一个sectionMoved,所以有必要。如果您不知道新语法,请使用旧语法:

connect( ui->tableView->horizontalHeader(), SIGNAL(sectionMoved(int,int,int)), this, SLOT(yourSlot(int,int,int)));

但是创建 yourSlot(int,int,int) 并在这个插槽中执行 last.push_back(logicalIndex);

当你想要saveState时,隐藏你存储在向量中的logicalIndex的所有部分并保存:

QByteArray array;
for(int i = 0; i < last.size(); i++)
{
ui->tableView->horizontalHeader()->hideSection(last.at(i));
}
array = ui->tableView->horizontalHeader()->saveState();

如果您想使用新语法和 lambda,请将 CONFIG += c++11 添加到 pro 文件。

关于qt - 从 QHeaderView saveState/restoreState 中排除移动的列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26401126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com