int i; for (i=0; i< model->columnCount(); i++) { QAction *action = new QAction(model->headerData(i, Qt::Horizontal).toString() , this); action->setCheckable(true); if (!ui.tableView->isColumnHidden(i)) action->setChecked(true); // connect( action, SIGNAL( triggered() ), ui.tableView, SLOT( hideColumn (i) ) ); - нужен рабочий аналог!!!!!! ui.tableView->horizontalHeader()->addAction(action); } ui.tableView->horizontalHeader()->setContextMenuPolicy(Qt::ActionsContextMenu);
MyTableView::hideColumn () { QAction*action = qobject_cast<QAction*>sender(); // собственно, дальше можно и не писать, думаю что способ понятен if(!action ->isChecked ()) HideColumn(action->text()); // это другой метод который предстоит реализовать, принимает строку имени колонки... else ShowColumn(action->text());}
int i; QMenu *columnsMenu= new QMenu(tr("Колонки")); columnsMenu->setIcon(QIcon(":images/images/configure.png")); QSignalMapper *signalMapper; signalMapper = new QSignalMapper(this); for (i=0; i< modelNedw->columnCount(); i++) { QAction *action = new QAction(modelNedw->headerData(i, Qt::Horizontal).toString() , this); action->setCheckable(true); if (!ui.tableView->isColumnHidden(i)) action->setChecked(true); connect(action, SIGNAL(triggered()), signalMapper, SLOT(map())); signalMapper->setMapping(action, ui.tableView->isColumnHidden(i)); connect(signalMapper, SIGNAL(mapped(int)), ui.tableView, SLOT(hideColumn(int))); columnsMenu->addAction(action); } QMenu *headerMenu= new QMenu; ui.tableView->horizontalHeader()->addAction(headerMenu->addMenu(columnsMenu)); ui.tableView->horizontalHeader()->setContextMenuPolicy(Qt::ActionsContextMenu);
void setMapping ( QObject * sender, int id ) void setMapping ( QObject * sender, const QString & text ) void setMapping ( QObject * sender, QWidget * widget ) void setMapping ( QObject * sender, QObject * object )