3

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

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

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

谢谢你。

问候,玛尼

4

1 回答 1

0

没有简单的方法可以做到这一点。我建议类似下一个:

使用向量来存储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);
 });

语法是如此复杂和丑陋,因为在 中有另一个sectionMovedQHeaderView所以它是必要的。如果您不知道新语法,请使用旧语法:

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您在 vector 中存储的所有部分并保存:

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 文件。

于 2014-10-16T11:03:18.850 回答