Qt 스타일 시트
Qt 스타일 시트를 사용하면 ` QStyle`을 서브클래싱하여 구현할 수 있는 기능 외에도, 텍스트 기반 규칙을 통해 위젯의 외관을 사용자 정의할 수 있습니다. Qt 스타일 시트의 개념, 용어 및 구문은 HTML 캐스케이딩 스타일 시트(CSS) 에서 큰 영감을 받았으나, 위젯 환경에 맞게 조정되었습니다.
스타일 시트는 프로토타이핑 및 소규모의 국소적인 조정을 위한 도구입니다. 애플리케이션의 최종 디자인을 구현하려면 QStyle 를 구현하거나 StyleKit을 사용하십시오. 『 Qt Widgets 』의 스타일링 접근법에서는 스타일 시트의 단점을 설명하고 다양한 접근법을 비교합니다.
주제:
참고: Qt 스타일 시트가 ` QWidget::setFont()`이나 ` QTreeWidgetItem::setBackground()`과 같이 위젯의 외관을 설정하는 함수와 동일한 위젯에서 함께 사용되는경우 , 설정 간에 충돌이 발생하면 스타일 시트가 우선 적용됩니다.
개요
스타일 시트는 QApplication::setStyleSheet()을 사용하여 전체 애플리케이션에 설정하거나, QWidget::setStyleSheet()을 사용하여 특정 위젯(및 그 자식 위젯)에 설정할 수 있는 텍스트 기반 사양입니다. 서로 다른 수준에서 여러 스타일 시트가 설정된 경우, Qt는 설정된 모든 스타일 시트 중에서 실제 적용될 스타일 시트를 도출합니다. 이를 ‘캐스케이딩’이라고 합니다.
첫 번째 창이 표시되기 전에 애플리케이션 스타일 시트를 한 번만 설정하십시오. 런타임에 스타일 시트를 변경하면 이전 스타일 시트의 일부만 새로운 스타일 시트로 되돌려지는 등 일관성 없는 결과가 발생할 수 있습니다. 런타임에 테마를 전환하기 위해 이 함수를 사용하지 마십시오.
예를 들어, 다음 스타일 시트는 모든 QLineEdit의 배경색을 노란색으로, 모든 QCheckBox의 텍스트 색상을 빨간색으로 지정합니다:
이러한 종류의 사용자 정의에는 스타일 시트가 QPalette 보다 훨씬 더 강력합니다. 예를 들어, QPushButton 에 대해 QPalette::Button 역할을 빨간색으로 설정하여 빨간색 푸시 버튼을 만들려는 유혹이 있을 수 있습니다. 그러나 스타일 작성자는 다양한 플랫폼의 지침과 (Windows 및 macOS의 경우) 네이티브 테마 엔진의 제약에 묶여 있기 때문에, 이 방법이 모든 스타일에서 작동한다고 보장할 수는 없습니다.
스타일 시트를 사용하면 QPalette 만으로는 수행하기 어렵거나 불가능한 모든 종류의 사용자 지정을 수행할 수 있습니다. 필수 입력란에 노란색 배경을 적용하거나, 잠재적으로 파괴적인 푸시 버튼에 빨간색 텍스트를 표시하거나, 멋진 체크박스를 원한다면 스타일 시트가 해답입니다.
스타일 시트는 현재 적용된 widget style 위에 적용됩니다. 즉, 애플리케이션은 가능한 한 네이티브와 같은 모습을 유지하되, 스타일 시트의 제약 조건도 함께 반영됩니다. 팔레트를 직접 조정하는 것과는 달리, 스타일 시트는 확실한 결과를 보장합니다. 예를 들어, QPushButton 의 배경색을 빨간색으로 설정하면, 모든 스타일과 모든 플랫폼에서 해당 버튼의 배경이 빨간색으로 표시될 것임을 확신할 수 있습니다. 또한, Qt Widgets Designer 는 스타일시트 통합 기능을 제공하여, 다양한 widget styles 에서 스타일시트가 주는 효과를 쉽게 확인할 수 있게 해줍니다.
스타일 시트를 사용하면 QStyle 를 서브클래싱하지 않고도 프로토타입에 독특한 외관을 부여할 수 있습니다. 예를 들어, 라디오 버튼과 체크박스에 사용할 이미지를 지정하는 방식이 있습니다.
스타일 시트가 활성화된 경우, QWidget::style()가 반환하는 QStyle 는 플랫폼별 스타일이 아닌 래퍼 “스타일 시트” 스타일입니다. 이 래퍼 스타일은 활성화된 모든 스타일 시트가 반영되도록 보장하며, 그 외의 경우에는 그리기 작업을 기본 플랫폼별 스타일(예: Windows의 windows11 스타일 또는 macOS의 macos 스타일; QStyleFactory 참조)로 전달합니다.
보안 고려 사항
스타일 시트 텍스트는 Qt에 의해 구문 분석되며 외부 리소스를 참조할 수 있습니다. url() 함수는 임의의 로컬 파일이나 Qt 리소스를 지정할 수 있으며, Qt는 이를 로드하여 배경, 테두리 또는 아이콘 이미지와 같이 렌더링합니다. 런타임에 선택할 수 있는 테마 파일, -stylesheet 명령줄 옵션을 통해 제공된 경로, 플러그인에서 제공된 콘텐츠 등, 완전히 자체적으로 제어할 수 없는 데이터로 스타일 시트의 전체 또는 일부를 구성하는 애플리케이션은 해당 콘텐츠를 신뢰할 수 없는 출처에서 가져온 다른 파일 경로와 마찬가지로 취급해야 합니다. 악의적인 스타일 시트는 Qt가 애플리케이션 프로세스가 액세스 권한을 가진 임의의 로컬 파일 내용을 읽어서 표시하도록 유도할 수 있습니다.
애플리케이션에 하드코딩되어 있거나 컴파일된 Qt 리소스 파일에 포함된 스타일 시트는 그 내용이 애플리케이션 자체에 의해 완전히 제어되므로, 이 고려 사항의 영향을 받지 않습니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.