Qt上下文菜单在QTreeView中中断选择

Qt上下文菜单在QTreeView中中断选择,qt,user-interface,contextmenu,qtreeview,Qt,User Interface,Contextmenu,Qtreeview,我有一个QTreeView类,其上下文菜单安装如下: m_ui.tree->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_ui.tree, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowTreeContextMenu(const QPoint&))); ... void ShowTreeContextMenu(

我有一个QTreeView类,其上下文菜单安装如下:

m_ui.tree->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_ui.tree, SIGNAL(customContextMenuRequested(const QPoint&)),
        this, SLOT(ShowTreeContextMenu(const QPoint&)));
...
void ShowTreeContextMenu(const QPoint& point)
{
   m_treeContextMenu->exec(m_ui.tree->viewport()->mapToGlobal(point));
}
但是,当显示关联菜单时,QTreeView将不再响应鼠标单击。在显示关联菜单时单击QTreeView中的项目将删除关联菜单,但不会选择已单击的项目


当右键单击一个新项目时,尤其会使人迷失方向,因为上下文菜单会在新项目上方弹出,但由于未选择该项目,上下文菜单的内容会引用以前选择的项目。

我尚未验证的一个可能解决方案是捕获右键单击的单击事件,在树状视图中手动进行选择,然后调用父单击事件,该事件将激活上下文菜单。

我尚未验证的一个可能解决方案是捕获右键单击的单击事件,在树状视图中手动进行选择,然后调用父单击事件,该事件将激活上下文菜单。

将QTreeView子类化,并添加受保护的方法void contextMenuEventQContextMenuEvent*事件;在此方法中,您可以执行QMenu:

class TreeView : public QTreeView{
  Q_OBJECT
public:
  TreeView(QWidget *parent);
  ~TreeView();
protected:
  void contextMenuEvent(QContextMenuEvent *event);
};

void TreeView::contextMenuEvent(QContextMenuEvent *event){
  QMenu menu(this);
  menu.addAction(action1);
  menu.addAction(action2);
  //...
  menu.addAction(actionN);
  menu.exec(event->globalPos());
}

对QTreeView进行子类化,并添加受保护的方法void contextMenuEventQContextMenuEvent*事件;在此方法中,您可以执行QMenu:

class TreeView : public QTreeView{
  Q_OBJECT
public:
  TreeView(QWidget *parent);
  ~TreeView();
protected:
  void contextMenuEvent(QContextMenuEvent *event);
};

void TreeView::contextMenuEvent(QContextMenuEvent *event){
  QMenu menu(this);
  menu.addAction(action1);
  menu.addAction(action2);
  //...
  menu.addAction(actionN);
  menu.exec(event->globalPos());
}

您没有说您使用的是哪个版本的Qt,但我们在Qt4.4.0中发现了相同的问题,它在4.3中工作。我们将此作为一个bug报告给了Trolltech


这仍然被标记为挂起,因此在此期间,我将遵循Shy的建议,拦截右键单击并自己进行选择。

您没有说您使用的是哪个版本的Qt,但我们在Qt4.4.0中发现了相同的问题,它在4.3中起作用。我们将此作为一个bug报告给了Trolltech


这仍然标记为挂起,因此在此期间,我将遵循Shy的建议,截取右键单击并自己进行选择。

我认为这一问题现在已经解决。我用的是4.4.3,它看起来很好用。我想这个问题已经解决了。我使用的是4.4.3,它似乎工作正常。我认为这在Qt4.4.3中已经修复。我认为这在Qt4.4.3中已经修复