c++ - QT 上下文菜单仅在 QTreeView 选择上

标签 c++ qt

我有一个上下文菜单,我只想在它位于 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/

相关文章:

linux - 在哪里可以获得更多 qtcreator 小部件?

c++ - Qt 设计器 : How to remove slot from designer?

c++ - 有没有办法将 QVariant 与 QVector 一起使用?

c++ - 如何将非空终止字符串输出到 iostream,但保持格式化

c++ - 为什么我解决N个皇后区问题的回溯解决方案不起作用?

c++ - 包含 Qt 头文件的正确方法是什么?

c++ - 使用 C++ 的 SFML 平台游戏

c++ - 同一字符串的多个#define是否使用相同的常量字符串?

c++ - 使用 boost 信号而不是 qt

c++ - 知道为什么 QHash 和 QMap 返回 const T 而不是 const T& 吗?