// Handles Horizontal header
{
Q_OBJECT
public:
explicit HeaderModel
(QObject * parent
= 0) { }
QVariant headerData
(int section, Qt
::Orientation orientation,
int role
) const {
if(orientation == Qt::Horizontal)
{
if(role == Qt::DisplayRole)
switch(section)
{
case 0: return "Id"; break;
case 1: return "Designation"; break;
case 2: return "Famille"; break;
case 3: return "Qte Maximum"; break;
case 4: return "Qte Minimum"; break;
case 5: return "Prix"; break;
case 6: return "Prix vente"; break;
default:
return QString("Column %1").
arg(section
+ 1);
break;
}
}
}
};
// Handles Vertical header
{
Q_OBJECT
public:
, mSelectedIndex(-1)
{
setMinimumWidth
(QImage("imgs/arrow.png").
width());
}
public slots:
{
int section = current.row();
if(mSelectedIndex != section)
{
mSelectedIndex = section;
viewport()->update();
}
}
protected:
void paintSection
(QPainter *painter,
const QRect &rect,
int logicalIndex
) const {
painter->save();
if(mSelectedIndex > -1)
{
if(mSelectedIndex == logicalIndex)
if(!isSectionHidden(logicalIndex))
painter
->drawImage
(rect,
QImage("imgs/arrow.png"));
}
painter->restore();
}
private:
int mSelectedIndex;
};
//Usage
HeaderModel headerModel;
headerModel.setSourceModel(&model);
Header * header = new Header(&tableView);
tableView.setModel(&headerModel);
tableView.setVerticalHeader(header);
tableView.show();
// Handles Horizontal header
class HeaderModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit HeaderModel(QObject * parent = 0)
: QSortFilterProxyModel(parent)
{ }
QVariant headerData(int section, Qt::Orientation orientation, int role) const
{
if(orientation == Qt::Horizontal)
{
if(role == Qt::DisplayRole)
switch(section)
{
case 0: return "Id"; break;
case 1: return "Designation"; break;
case 2: return "Famille"; break;
case 3: return "Qte Maximum"; break;
case 4: return "Qte Minimum"; break;
case 5: return "Prix"; break;
case 6: return "Prix vente"; break;
default:
return QString("Column %1").arg(section + 1);
break;
}
}
return QVariant();
}
};
// Handles Vertical header
class Header : public QHeaderView
{
Q_OBJECT
public:
explicit Header(QWidget * parent)
: QHeaderView(Qt::Vertical, parent)
, mSelectedIndex(-1)
{
setMinimumWidth(QImage("imgs/arrow.png").width());
}
public slots:
void changeCurrent(const QModelIndex & current, const QModelIndex & previous)
{
int section = current.row();
if(mSelectedIndex != section)
{
mSelectedIndex = section;
viewport()->update();
}
}
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
painter->save();
if(mSelectedIndex > -1)
{
if(mSelectedIndex == logicalIndex)
if(!isSectionHidden(logicalIndex))
painter->drawImage(rect, QImage("imgs/arrow.png"));
}
painter->restore();
}
private:
int mSelectedIndex;
};
//Usage
QSqlQueryModel model;
HeaderModel headerModel;
headerModel.setSourceModel(&model);
QTableView tableView;
Header * header = new Header(&tableView);
tableView.setModel(&headerModel);
tableView.connect(tableView.selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), header, SLOT(changeCurrent(QModelIndex,QModelIndex)));
tableView.setVerticalHeader(header);
tableView.setSelectionMode(QAbstractItemView::SingleSelection);
tableView.setSelectionBehavior(QAbstractItemView::SelectRows);
tableView.show();
To copy to clipboard, switch view to plain text mode
Bookmarks