Perhaps this code will help you:
==> dialog.h <==
QStandardItemModel *model; QSortFilterProxyModel *proxyModel; QTreeView *treeView;
==> dialog.cpp <==
void CImportTabWidget::createGUI() { ... proxyModel = new QSortFilterProxyModel; proxyModel->setDynamicSortFilter(true); treeView = new QTreeView; treeView->setEditTriggers(QAbstractItemView::NoEditTriggers); treeView->setRootIsDecorated(false); treeView->setAlternatingRowColors(true); treeView->setModel(proxyModel); model = new QStandardItemModel(0, 4); model->setHeaderData(0, Qt::Horizontal, tr("Name")); model->setHeaderData(1, Qt::Horizontal, tr("Comment")); model->setHeaderData(2, Qt::Horizontal, tr("Size")); model->setHeaderData(3, Qt::Horizontal, tr("Date")); fillTreeViewData(); proxyModel->setSourceModel(model); ... } ////////////////////////////////////////////////////////////////////////// void CImportTabWidget::createMenus() { treeView->setContextMenuPolicy(Qt::CustomContextMenu); connect(treeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); } ////////////////////////////////////////////////////////////////////////// void CImportTabWidget::contextMenu(const QPoint &widgetXY) { Q_UNUSED(widgetXY); QMenu menu(this); /* */ deleteAct->setEnabled((!model->rowCount()) ? false : true ); deleteAllAct->setEnabled((!model->rowCount()) ? false : true ); /* */ QModelIndex index = treeView->currentIndex(); QString fileName = model->data(model->index(index.row(), 0)).toString(); if (!fileName.isEmpty()) { importAct->setText(tr("Import %1").arg(fileName)); //deleteAct->setText(tr("Delete %1").arg(fileName)); } /* */ menu.addAction(deleteAct); menu.addAction(deleteAllAct); menu.exec(QCursor::pos()); }
Good luck
source share