PDA

View Full Version : Frozen Column in QTableView



RameshNani
27th July 2016, 17:47
Hi All,

I would like to hide some columns in QTableView , It's working some times and some times it's not working .

My window desing like Frozen View and QTable View are side by side . in frozen View we only shows Frozen columns , remaining all shows in QTableView .
The Frozen Columns list is not stable , it will change in different nested levels .

I am using below code , can you sugest me on this issue . I faced issue mostly , like in 1st level i have 2 frozen columns , 2nd level one column and 3rd level 1 one column . when i go back from 3rd to 2nd it's working fine . when i go back from 2nd to 1st one column showing and other one gonna hide . Please help me .


void FreezeTableWidget::init()
{
// <<<<<< Both tables get the same header type
// setHorizontalHeader(new CustomHeader(Qt::Horizontal, this));

qDebug()<<"Frozen Columns fcol"<<fcol;
setHorizontalHeader(m_header);
frozenTableView->setHorizontalHeader(m_header1);
//this->model()->reset();//RCHFB19
frozenTableView->rect();

frozenTableView->setModel(model());
frozenTableView->setFocusPolicy(Qt::NoFocus);
frozenTableView->verticalHeader()->hide();
// frozenTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
frozenTableView->horizontalHeader()->setResizeMode(QHeaderView::Fixed);


viewport()->stackUnder(frozenTableView);
horizontalHeader()->stackUnder(frozenTableView); // <<<<<< make sure the header goes under the overlaid view too
//! [init part1]

//! [init part2]
//SCH frozenTableView->setStyleSheet("QTableView { border: none;" "background-color: #2e5c7f;" "alternate-background-color:#B4CFE4;" "selection-background-color: 2D347B}"); //for demo purposes
frozenTableView->setStyleSheet("QTableView { border: none;" "background-color: #2e5c7f;" "alternate-background-color:gray;" "selection-background-color: 2D347B}"); //for demo purposes

//setStyleSheet("background-color:#2e5c7f;" "alternate-background-color:#B4CFE4;" "selection-background-color: 2D347B ;" "color:white;" "border-width:0px;" );
// frozenTableView->setSelectionModel(selectionModel());
updateFrozenTableGeometry();
qDebug()<<"columnCount in Frozen"<<model()->columnCount();
for (int col = 0; col < model()->columnCount(); ++col){ // <<<<<< hide one less column

if(col<fcol)
{

//feb 18th frozenTableView->setColumnWidth(col, columnWidth(col) );
frozenTableView->setColumnHidden(col, false);
frozenTableView ->showColumn(col);
// qDebug()<<"colllllllllllshow"<<col<< model()->columnCount()<<model()->headerData(col, Qt::Horizontal).toString()<< frozenTableView->isColumnHidden(col);
//m_header1->showSection(col);
}
else
{
// qDebug()<<"colllllllllllhidden else"<<col<< model()->columnCount();
frozenTableView->setColumnHidden(col, true);
}
qDebug()<<"colllllllllllshow"<<col<< model()->columnCount()<<model()->headerData(col, Qt::Horizontal).toString()<< frozenTableView->isColumnHidden(col);
}
frozenTableView->setStyleSheet("QTableView { border: none;" "background-color: #2e5c7f;" "alternate-background-color:gray;" "selection-background-color: 2D347B}"); //for demo purposes

// frozenTableView->setColumnWidth(0, columnWidth(0) );
// frozenTableView->setColumnWidth(1, columnWidth(1) ); // <<<<<< match the extra column's width
//
frozenTableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOf f);
frozenTableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff) ;
frozenTableView->setSortingEnabled(true);
frozenTableView->show();

// updateFrozenTableGeometry();

setHorizontalScrollMode(ScrollPerPixel);
setVerticalScrollMode(ScrollPerPixel);
frozenTableView->setVerticalScrollMode(ScrollPerPixel);
//feb18th
/*
verticalHeader()->setUpdatesEnabled(FALSE);

for (unsigned int i = 0; i < numRows(); i++)
verticalHeader()->resizeSection(i, rowHeight);

verticalHeader()->setUpdatesEnabled(TRUE);*/

}
//! [init part2]

}