#include #include "main.h" //#include "main.moc" /////////////////////////////////////////////////////////////////////////////////////////////////// QMyTableView::QMyTableView( QWidget* parent /*= 0*/ ) :QTableView(parent) { HeaderMenu = new QMenu(this); QAction* HideColumn = new QAction("hide column", this); HeaderMenu->addAction(HideColumn); connect(HeaderMenu, SIGNAL(triggered(QAction*)), this, SLOT(headerMenuTriggered(QAction*))); } void QMyTableView::sectionClicked( int section ) { qDebug() << "sectionClicked" << section; } void QMyTableView::sectionPressed( int section ) { qDebug() << "sectionPressed" << section; } void QMyTableView::headerContext(const QPoint& Pos) { HeaderMenu->exec(QCursor::pos()); int ColumnIdx = horizontalHeader()->logicalIndexAt(Pos); setColumnHidden(ColumnIdx, true); } void QMyTableView::headerMenuTriggered(QAction* theAction) { int a = 5; } /////////////////////////////////////////////////////////////////////////////////////////////////// int main(int argc, char **argv) { QApplication a(argc, argv); QMyTableView tv; QStandardItemModel *sim = new QStandardItemModel(&tv); QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(&tv); proxyModel->setSourceModel(sim); proxyModel->setDynamicSortFilter(true); proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); QList row; for (int i=0;i<12;i++) row.append(new QStandardItem(QString(QChar((char)(65 + i))))); sim->appendRow(row); row.clear(); for (int i=12;i>0;i--) row.append(new QStandardItem(QString(QChar((char)(65 + i))))); sim->appendRow(row); tv.setSortingEnabled(true); tv.horizontalHeader()->setSortIndicatorShown(true); tv.horizontalHeader()->setClickable(true); tv.horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); tv.horizontalHeader()->setStretchLastSection(true); tv.horizontalHeader()->setResizeMode(QHeaderView::Interactive); tv.setModel(proxyModel); tv.setColumnHidden(5, true); tv.setColumnHidden(6, true); tv.sortByColumn(1, Qt::AscendingOrder); tv.connect(tv.horizontalHeader(), SIGNAL(sectionClicked(int)), &tv, SLOT(sectionClicked(int))); tv.connect(tv.horizontalHeader(), SIGNAL(sectionPressed(int)), &tv, SLOT(sectionPressed(int))); tv.connect(tv.horizontalHeader(), SIGNAL(customContextMenuRequested(const QPoint&)), &tv, SLOT(headerContext(const QPoint& ))); tv.show(); return a.exec(); }