2009-09-30 7 views
6

는 내가 탭을 클릭 할 때마다 상황에 맞는 메뉴를 표시해야하며 특정 탭에 반응 할 필요가있다. 하위 클래스를 지정하지 않고이 작업을 수행 할 수있는 방법이 있습니까?QTabWidget 탭 컨텍스트 메뉴

답변

5

쉬운 방법으로, 그러나 가능하지 정확하게 당신이 필요 : 신호에 연결되어있는 슬롯에서 당신의 QTabWidget

  • 의 'currentChanged'신호에

    1. 연결하는 QMenu를을 만들고 채 웁니다 마지막
    2. 필요에 따라, 상기 신호에 접속되고, 슬롯, QMenu를 :: 간부 (QCursor : POS를())

    이 것이다 탭이 변경 될 때마다 호출하는 기능을 얻을 수 (없는 nece 호출 클릭)하고 현재 마우스 위치에 메뉴가 나타납니다. 당신의 QTabWidget에

    1. 전화 QObject::installEventFilter를, 당신의 QTabWidget의 모든 이벤트가 자신의 개체로 리디렉션되도록 : 정확히 무엇을 설명하지

      복잡한 방법. 자신의 개체에서

    2. , QObject::customEvent 다시 구현하고 모든 QMouseEvent 이벤트를 처리합니다.
    3. 는 필요에 따라 QMenu를 채우기 당신이 취급하고있는 QMouseEvent의 위치에 QMenu를 :: 간부를 호출한다. 그는 특히 그가 QTabWidget를 서브 클래 싱하지 않고 원하는 것을 달성 할 수있는 방법을 요구하기 때문에
  • +0

    첫 번째 쉬운 해결책은 그가 원하는대로 작동하지 않습니다. 현재 탭에서 마우스 클릭이 완료되면 컨텍스트 메뉴가 표시되지 않습니다. 유일한 해결책은 두 번째 것 같습니다. –

    0

    난 당신이 QTabWidget에서 상속 자신의 클래스를 생성하고 마우스 오른쪽 버튼을 클릭에 대한 귀하의 상황에 맞는 메뉴를 만들 수있는 기능을 보호 MousePressEvent (QMouseEvent)를 오버라이드 (override) 할 필요가 있다고 생각합니다.

    +0

    -1. 그는 installEventFilter에 익숙하지 않은 경우 –

    +2

    , 상속은 쉬운 방법이다. 하지만 먼저 두 번째 솔루션을 사용해 보겠습니다. –