Qt QMenu 스타일링 및 단축키 설정 가이드

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);

태그: Qt QMenu QMenuBar StyleSheet QtWidgets

6월 22일 23:43에 게시됨