2012-05-31 4 views
0

컨텍스트 메뉴 안에 여러 가지 작업을 만들었습니다. 이제 작은 도구 모음에 동일한 작업을 추가하고 싶습니다. 문제는 도구 모음이 도킹 영역 중 하나가 아닌 인 VerticalLayout (다른 위젯 아래)에 위치해야한다는 것입니다. 도구 모음을 사용자 지정 위치로 이동하거나 다른 컨테이너 안에 작업을 배치 할 수 있습니까?내 창 어디에나 작업 배치

답변

0

QActions은 메뉴와 도구 모음에만 추가됩니다.

내가 바로 거기에있는 경우 QActions을 일반 위젯에 배치하고 싶습니다. 맞습니까?

해결 방법은 자신의 QPushButton 클래스를 구현하는 것입니다. 이 클래스에 다음을 수행하는 addAction 메소드를 제공하십시오. 단추의 멤버로 QAction을 추가하고 QAction의 텍스트를 단추의 레이블로 설정하고 단추의 clicked() 신호를 작업의 trigger() 슬롯에 연결합니다. 이 같은

뭔가 :

void my_button::addAction(QAction* p_action) 
{ 
    if(pAction != NULL) 
    { 
     m_linked_action = p_action; 

     setText(m_linked_action->text()); 

     connect(this,SIGNAL(clicked()),m_linked_action,SLOT(trigger())); 
    } 
    else 
    { 
     assert(false); 
    } 
} 

이 단지 매우 거친 예입니다. 액션을 제거 할 때 시그널의 적절한 연결 해제와 같은 많은 것들을 고려해야합니다. 당신은 또한 확인 가능한 행동과 그 물건들에 대한 특별한 대우를 알고 있어야합니다 (푸시 버튼은 체크 가능해야하고 신호는 연결되어야합니다 ...). 그러나 이것이 시작하는 좋은 방법이라고 생각합니다.


대안 : 당신은 또한 연결, 당신의 버튼의 mouseReleaseEvent을 다시 구현 대신 할 거기 QAction::trigger() 부를 수있는 무엇
. 이와 같이하면 :

void my_button::mouseReleaseEvent(QMouseEvent* e) 
{ 
    if(e->button() == Qt::LeftButton) 
    { 
     if(m_linked_action != NULL) 
     { 
      m_linked_action->trigger(); 
     } 
    } 

    QPushButton::mouseReleaseEvent(e); 
} 

이와 같이하면 버튼을 아무 곳에 나 배치 할 수 있으며 버튼을 클릭 할 때 연결된 동작이 트리거됩니다.