티스토리 뷰

728x90

QT UI 앱을 작성하다가 특정 메뉴의 서브 메뉴 일부를 라디오 버튼 동작 방식처럼 그룹 중 일부만 선택되도록 하는 필요가 생겼다. 서브 메뉴를 열면 현재 선택 상태도 보인다. 

 

먼저 결과 화면먼저 보면 위의 그림과 같다. 개별 서브메뉴를 선택했을 때 미리 설정된 액션 슬롯도 수행하고 어떤 메뉴가 선택 상태인지도 표시된다.

 

actZoom40 = new QAction(QIcon(), _("40%"),this);
connect(actZoom40, SIGNAL(triggered()), this, SLOT(OnZoom40Menu()));
actZoom70 = new QAction(QIcon(), _("70%"),this);
connect(actZoom70, SIGNAL(triggered()), this, SLOT(OnZoom70Menu()));
actZoom100 = new QAction(QIcon(), _("100%"),this);
connect(actZoom100, SIGNAL(triggered()), this, SLOT(OnZoom100Menu()));
actZoom150 = new QAction(QIcon(), _("150%"),this);
connect(actZoom150, SIGNAL(triggered()), this, SLOT(OnZoom150Menu()));
actZoom200 = new QAction(QIcon(), _("200%"),this);
connect(actZoom200, SIGNAL(triggered()), this, SLOT(OnZoom200Menu()));
actZoom400 = new QAction(QIcon(), _("400%"),this);
connect(actZoom400, SIGNAL(triggered()), this, SLOT(OnZoom400Menu()));
actZoom40->setCheckable(true);
actZoom70->setCheckable(true);
actZoom100->setCheckable(true);
actZoom150->setCheckable(true);
actZoom200->setCheckable(true);
actZoom400->setCheckable(true);

작업을 위해서 먼저 각 서브메뉴에 대한 QAction을 정의하고 해당하는 슬롯(Slot)을 설정한다. 그리고 중요한 점이 있는데 각 액션에 대하여 setCheckable(true)를 설정해 주어야 한다.

 

mn_zoom = mn_view->addMenu(_("&Zoom"));
QActionGroup *zactgrp = new QActionGroup(this);
zactgrp->setExclusive(true);
zactgrp->addAction(actZoom40);
zactgrp->addAction(actZoom70);
zactgrp->addAction(actZoom100);
zactgrp->addAction(actZoom150);
zactgrp->addAction(actZoom200);
zactgrp->addAction(actZoom400);
mn_zoom->addAction(actZoom40);
mn_zoom->addAction(actZoom70);
mn_zoom->addAction(actZoom100);
mn_zoom->addAction(actZoom150);
mn_zoom->addAction(actZoom200);
mn_zoom->addAction(actZoom400);
actZoom100->setChecked(true);

상위 메뉴에 각 서브메뉴를 addAction()으로 추가해 주는 것은 다른 메뉴형태와 동일한데, 메뉴 기능을 수행하면서 라디오 버튼처럼 동작하게 하려면 QActionGroup을 생성하여 액션 그룹에 addAction()으로 각 서브메뉴를 추가해 주고 setExclusive(true)로 설정해야 한다. 특정 액션을 선택하는 것은 위의 코드처럼 해당 액션에 대하여 setChecked(true)를 설정하면 그룹에 있는 여러 서브메뉴 중에 해당 액션만 선택 상태가 된다.

 

 

 

 

728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함