本文属于《QTreeView使用系列教程》之一,欢迎查看其它文章。
QTreeView也是属于QWidget,所以也适用于QWidget右键菜单的添加方式。
首先使用setContextMenuPolicy()定制菜单:
// 为treeView添加右键菜单
treeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(treeView, &QTreeView::customContextMenuRequested, this, &MainWindow::onTreeViewMenuRequested);
然后在槽函数onTreeViewMenuRequested()中处理菜单创建和弹出:
void MainWindow::onTreeViewMenuRequested(const QPoint &pos)
{
QModelIndex curIndex = treeView->indexAt(pos);
if (curIndex.isValid()) // 右键选中了有效index
{
QIcon view = QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation);
QIcon test = QApplication::style()->standardIcon(QStyle::SP_DesktopIcon);
// 创建菜单
QMenu menu;
menu.addAction(view, tr("查看"), this, &MainWindow::onActionView);
menu.addSeparator();
menu.addAction(test, tr("测试"), this, &MainWindow::onActionTest);
menu.exec(QCursor::pos());
}
}
void MainWindow::onActionView()
{
QModelIndex curIndex = treeView->currentIndex();
QModelIndex index = curIndex.sibling(curIndex.row(), 0); // 获取同一行第0列
if(index.isValid())
{
QMessageBox::information(this, tr("信息"), index.data().toString());
}
}
void MainWindow::onActionTest()
{
QMessageBox::information(this, tr("信息"), tr("test"));
}
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。
本文涉及工程代码,公众号回复:34AddMenu,即可下载。