QMenu와 QMenuBar를 커스터마이징하는 방법과 단축키 표시 관련 문제 해결 방법을 정리합니다.
단축키 표시 문제 해결
QMenu를 QMenuBar에 추가하지 않고 단독으로 사용할 때 Ctrl+키 조합 같은 단축키 힌트가 표시되지 않는 문제가 있습니다. 이를 해결하려면 QAction을 QToolBar에 등록해야 단축키가 정상 동작합니다.
기본 QMenu 스타일시트
/* 메뉴 전체 영역 */
QMenu {
background-color: #ffffff;
border: 1px solid #cccccc;
padding: 4px;
}
/* 개별 메 항목 */
QMenu::item {
background-color: transparent;
padding: 6px 28px;
margin: 2px 6px;
border-radius: 3px;
}
/* 마우스 오버/키보드 선택 상태 */
QMenu::item:selected {
background-color: #3399ff;
color: white;
}
/* 비활성화된 항목 */
QMenu::item:disabled {
color: #999999;
}
고급 커스터마이징 예시
QMenu {
background-color: #f5f5f5;
border: 1px solid #a0a0a0;
margin: 4px;
}
QMenu::item {
padding: 4px 30px 4px 24px;
border: 1px solid transparent;
}
QMenu::item:selected {
border-color: #0066cc;
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 #66b3ff, stop:1 #0066cc);
color: white;
}
/* 체크된 아이콘 영역 */
QMenu::icon:checked {
background: #e0e0e0;
border: 1px inset #b0b0b0;
}
/* 구분선 */
QMenu::separator {
height: 1px;
background: #c0c0c0;
margin: 6px 12px;
}
/* 체크/라디오 표시기 */
QMenu::indicator {
width: 14px;
height: 14px;
margin-left: 6px;
}
/* 비독점 그룹 (체크박스 스타일) */
QMenu::indicator:non-exclusive:unchecked {
image: url(:/icons/check_unchecked.svg);
}
QMenu::indicator:non-exclusive:checked {
image: url(:/icons/check_checked.svg);
}
/* 독점 그룹 (라디오버튼 스타일) */
QMenu::indicator:exclusive:unchecked {
image: url(:/icons/radio_unchecked.svg);
}
QMenu::indicator:exclusive:checked {
image: url(:/icons/radio_checked.svg);
}
QMenuBar 스타일링
QMenuBar {
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 #f0f0f0, stop:1 #d0d0d0);
border-bottom: 1px solid #a0a0a0;
}
QMenuBar::item {
padding: 4px 12px;
margin: 2px;
background: transparent;
border-radius: 4px;
}
QMenuBar::item:selected {
background: #b0b0b0;
}
QMenuBar::item:pressed {
background: #909090;
}
실용적인 적용 예시
// C++ 코드에서 스타일시트 적용
auto* popupMenu = new QMenu(this);
popupMenu->setStyleSheet(R"(
QMenu {
background-color: #2d2d2d;
color: #e0e0e0;
border: 1px solid #404040;
}
QMenu::item {
padding: 8px 32px;
}
QMenu::item:selected {
background-color: #0d6396;
}
)");
// 단축키 설정
auto* openAction = new QAction(tr("열기"), this);
openAction->setShortcut(QKeySequence::Open); // Ctrl+O
popupMenu->addAction(openAction);
// ToolBar에 추가하여 단축키 활성화
ui->mainToolBar->addAction(openAction);