문제

나는 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 컨텍스트 메뉴가 표시되는 동안 컨텍스트 메뉴는 제거되지만 클릭한 항목은 선택되지 않습니다.

특히 새 항목을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴가 새 항목 위에 표시되지만 항목을 선택하지 않았으므로 상황에 맞는 메뉴의 내용이 이전에 선택한 항목을 참조하므로 특히 혼란스럽습니다.

도움이 되었습니까?

해결책

어떤 버전의 Qt를 사용하고 있는지는 밝히지 않았지만 Qt4.4.0에서 동일한 문제가 발견되었으며 4.3에서는 작동했습니다.우리는 이것을 버그로 Trolltech에 보고했습니다. 225615

이 항목은 여전히 ​​보류 중으로 표시되어 있으므로 그동안 오른쪽 클릭을 가로채서 직접 선택하라는 Shy의 제안을 따를 것입니다.

다른 팁

내가 확인하지 않은 가능한 솔루션은 마우스 오른쪽 클릭 클릭 이벤트를 캡처하고 트리 뷰에서 수동으로 선택한 다음 부모 클릭 이벤트를 호출하여 컨텍스트 메뉴를 활성화하는 것입니다.

qtreeview 서브 클래스 및 보호 된 메소드 void contextmendevent (qcontextmenuevent *이벤트)를 추가합니다. 이 방법에서는 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());
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top