#ifndef NTABLEW_H
#define NTABLEW_H
#include <QTableWidget>
#include <QStandardItemModel>
{
Q_OBJECT
public:
void freezeRow(bool froze, int row);
void unfreezeRow(int row);
public slots:
void showFrozenRow();
void hideFrozenRow();
protected:
private:
bool m_frozen;
int m_frozenrow;
void init();
void updateFrozenTableGeometry();
private slots:
void updateSectionWidth(int logicalIndex, int oldSize, int newSize);
void updateSectionHeight(int logicalIndex, int oldSize, int newSize);
};
#endif
#ifndef NTABLEW_H
#define NTABLEW_H
#include <QTableWidget>
#include <QStandardItemModel>
class NTableW : public QTableWidget
{
Q_OBJECT
public:
NTableW(QWidget *parent = 0);
void freezeRow(bool froze, int row);
void unfreezeRow(int row);
public slots:
void showFrozenRow();
void hideFrozenRow();
protected:
virtual void resizeEvent(QResizeEvent *event);
private:
QTableView * m_frozentableview;
QStandardItemModel * m_frozenmodel;
bool m_frozen;
int m_frozenrow;
void init();
void updateFrozenTableGeometry();
private slots:
void updateSectionWidth(int logicalIndex, int oldSize, int newSize);
void updateSectionHeight(int logicalIndex, int oldSize, int newSize);
};
#endif
To copy to clipboard, switch view to plain text mode
#include "ntablew.h"
#include <QHeaderView>
#include "colordelegate.h"
NTableW
::NTableW(QWidget *parent
) :{
m_frozen = false;
connect(horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionWidth(int,int,int)));
connect(verticalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionHeight(int,int,int)));
connect(m_frozentableview->horizontalScrollBar(), SIGNAL(valueChanged(int)),
horizontalScrollBar(), SLOT(setValue(int)));
connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
m_frozentableview->horizontalScrollBar(), SLOT(setValue(int)));
}
void NTableW::freezeRow(bool froze, int row = 0)
{
m_frozen = froze;
m_frozenrow = row;
setItemDelegateForRow(m_frozenrow, new ColorDelegate(this));
if(froze){
init();
}else{
m_frozentableview->lower();
}
}
void NTableW::unfreezeRow(int row){
m_frozentableview->lower();
m_frozenmodel->clear();
}
{
//QTableView::resizeEvent(event);
updateFrozenTableGeometry();
}
void NTableW::init()
{
for(int i = 0; i < columnCount(); i++){
m_frozenmodel->setItem(0, i, newItem);
}
m_frozentableview->setModel(m_frozenmodel);
m_frozentableview->setFocusPolicy(Qt::NoFocus);
viewport()->stackUnder(m_frozentableview);
m_frozentableview->setSelectionModel(selectionModel());
QHeaderView * horizontalHeaders
= m_frozentableview
->horizontalHeader
();
horizontalHeaders->setVisible(false);
QHeaderView * verticalHeaders
= m_frozentableview
->verticalHeader
();
verticalHeaders
->sectionResizeMode
(QHeaderView::Fixed);
if(!m_siderow) verticalHeaders->setVisible(false);
m_frozentableview->setItemDelegateForRow(m_frozenrow, new ColorDelegate(m_frozentableview));
m_frozentableview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_frozentableview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_frozentableview->show();
updateFrozenTableGeometry();
setHorizontalScrollMode(ScrollPerPixel);
setVerticalScrollMode(ScrollPerPixel);
m_frozentableview->setVerticalScrollMode(ScrollPerPixel);
}
void NTableW::showFrozenRow()
{
m_frozentableview->raise();
}
void NTableW::hideFrozenRow()
{
m_frozentableview->lower();
}
void NTableW::updateSectionWidth(int logicalIndex, int /* oldSize */, int newSize)
{
m_frozentableview->setColumnWidth(logicalIndex, newSize);
}
void NTableW::updateSectionHeight(int logicalIndex, int /* oldSize */, int newSize)
{
if (logicalIndex == m_frozenrow){
m_frozentableview->setRowHeight(m_frozenrow, newSize);
}
}
void NTableW::updateFrozenTableGeometry(){
if(rowViewportPosition(m_frozenrow) <= horizontalHeader()->height()){
m_frozentableview->setGeometry(verticalHeader()->width()+frameWidth(),
horizontalHeader()->height(), viewport()->width(), rowHeight(m_frozenrow));
}else if(rowViewportPosition(m_frozenrow) >= viewport()->height() - rowHeight(m_frozenrow) - horizontalHeader()->height()){
m_frozentableview->setGeometry(verticalHeader()->width()+frameWidth(),
viewport()->height()-rowHeight(m_frozenrow)-horizontalHeader()->height(), viewport()->width(), rowHeight(m_frozenrow));
}else{
m_frozentableview->setGeometry(verticalHeader()->width() + frameWidth(),
rowViewportPosition(m_frozenrow), viewport()->width(), rowHeight(m_frozenrow));
}
}
#include "ntablew.h"
#include <QHeaderView>
#include "colordelegate.h"
NTableW::NTableW(QWidget *parent) :
QTableWidget(parent)
{
m_frozen = false;
m_frozentableview = new QTableView();
m_frozenmodel = new QStandardItemModel();
connect(horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionWidth(int,int,int)));
connect(verticalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionHeight(int,int,int)));
connect(m_frozentableview->horizontalScrollBar(), SIGNAL(valueChanged(int)),
horizontalScrollBar(), SLOT(setValue(int)));
connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
m_frozentableview->horizontalScrollBar(), SLOT(setValue(int)));
}
void NTableW::freezeRow(bool froze, int row = 0)
{
m_frozen = froze;
m_frozenrow = row;
setItemDelegateForRow(m_frozenrow, new ColorDelegate(this));
if(froze){
init();
}else{
m_frozentableview->lower();
}
}
void NTableW::unfreezeRow(int row){
m_frozentableview->lower();
m_frozenmodel->clear();
}
void NTableW::resizeEvent(QResizeEvent * event)
{
//QTableView::resizeEvent(event);
updateFrozenTableGeometry();
}
void NTableW::init()
{
QStandardItem * newItem = 0;
for(int i = 0; i < columnCount(); i++){
newItem = new QStandardItem(item(m_frozenrow, i)->text());
m_frozenmodel->setItem(0, i, newItem);
}
m_frozentableview->setModel(m_frozenmodel);
m_frozentableview->setFocusPolicy(Qt::NoFocus);
m_frozentableview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
viewport()->stackUnder(m_frozentableview);
m_frozentableview->setSelectionModel(selectionModel());
QHeaderView * horizontalHeaders = m_frozentableview->horizontalHeader();
horizontalHeaders->setVisible(false);
QHeaderView * verticalHeaders = m_frozentableview->verticalHeader();
verticalHeaders->sectionResizeMode(QHeaderView::Fixed);
if(!m_siderow) verticalHeaders->setVisible(false);
m_frozentableview->setItemDelegateForRow(m_frozenrow, new ColorDelegate(m_frozentableview));
m_frozentableview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_frozentableview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_frozentableview->show();
updateFrozenTableGeometry();
setHorizontalScrollMode(ScrollPerPixel);
setVerticalScrollMode(ScrollPerPixel);
m_frozentableview->setVerticalScrollMode(ScrollPerPixel);
}
void NTableW::showFrozenRow()
{
m_frozentableview->raise();
}
void NTableW::hideFrozenRow()
{
m_frozentableview->lower();
}
void NTableW::updateSectionWidth(int logicalIndex, int /* oldSize */, int newSize)
{
m_frozentableview->setColumnWidth(logicalIndex, newSize);
}
void NTableW::updateSectionHeight(int logicalIndex, int /* oldSize */, int newSize)
{
if (logicalIndex == m_frozenrow){
m_frozentableview->setRowHeight(m_frozenrow, newSize);
}
}
void NTableW::updateFrozenTableGeometry(){
if(rowViewportPosition(m_frozenrow) <= horizontalHeader()->height()){
m_frozentableview->setGeometry(verticalHeader()->width()+frameWidth(),
horizontalHeader()->height(), viewport()->width(), rowHeight(m_frozenrow));
}else if(rowViewportPosition(m_frozenrow) >= viewport()->height() - rowHeight(m_frozenrow) - horizontalHeader()->height()){
m_frozentableview->setGeometry(verticalHeader()->width()+frameWidth(),
viewport()->height()-rowHeight(m_frozenrow)-horizontalHeader()->height(), viewport()->width(), rowHeight(m_frozenrow));
}else{
m_frozentableview->setGeometry(verticalHeader()->width() + frameWidth(),
rowViewportPosition(m_frozenrow), viewport()->width(), rowHeight(m_frozenrow));
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks