2014-10-16 44 views
3

我有一個問題saveState/restoreState的QHeaderView。我在我的應用程序中有幾個QTableViews。 QTableView保存並恢復它的QHeaderView設置,但對於某些QTableViews,我想將移動的節順序從保存到ini文件的beeing中排除。排除從QHeaderView中移動的列順序saveState/restoreState

這意味着,saveState應保存排序列,排序指示符,列寬,但不保存用戶是否移動了列。

有沒有辦法不保存移動的列?

謝謝。

問候, 瑪尼

回答

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您在矢量存儲和保存所有部分:

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

添加CONFIG += c++11親文件,如果你想使用新的語法和lambda。