我有一个上下文菜单,我只想在它位于 QTreeView 的项目顶部时才显示。什么时候在空白处我什么都不想做。 这是我到现在为止拥有的
void MainTreeViewController::showContextMenu(const QPoint& pos)
{
QPoint globalPos = mtreeView->mapToGlobal(pos);
QMenu rightClickMenu;
for(int i = 0; i < kCharModelRightClickOptionsCount; ++i){
rightClickMenu.addAction("Menu option");
}
QAction* selectedItem = rightClickMenu.exec(globalPos);
if (selectedItem){
}
}
谢谢!
最佳答案
首先,您需要使用 QAbstractItemView::indexAt()
函数找到光标下的模型索引。获取无效索引将表明您单击了任何 TreeView 项目。因此,您的代码将如下所示:
void MainTreeViewController::showContextMenu(const QPoint& pos)
{
// Do not show menu if clicked outside of tree view nodes.
QModelIndex idx = mtreeView->indexAt(pos);
if (!idx.isValid())
return;
QPoint globalPos = mtreeView->mapToGlobal(pos);
QMenu rightClickMenu;
for(int i = 0; i < kCharModelRightClickOptionsCount; ++i){
rightClickMenu.addAction("Menu option");
}
QAction* selectedItem = rightClickMenu.exec(globalPos);
if (selectedItem){
}
}
关于c++ - QT 上下文菜单仅在 QTreeView 选择上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458315/