2021년 8월 15일 일요일

1.7 속성 및 하위 컨트롤 사용자 지정

 Qt의 스타일 시트 시스템을 사용하면 멋지고 전문적인 UI를 쉽게 만들 수 있습니다. 이 예에서는 위젯에 사용자 정의 속성을 설정하고 이를 사용하여 다른 스타일 간에 전환하는 방법을 배웁니다.

위젯 속성과 하위 컨트롤을 사용자 정의하려면 다음 단계를 따르십시오.

  1. 새로운 Qt 프로젝트를 만들어 봅시다. 이를 위해 UI를 준비했습니다. 다음 스크린샷과 같이 UI에는 왼쪽에 세 개의 버튼이 있고 오른쪽에 세 페이지가 있는 탭 위젯이 있습니다.
    1. Vertical Layout 2개, PushButton 3개, Tab widget 사용

      << code >>

      QPushButton

      {

      color: white;

      background-color: #27a9e3;

      border-width: 0px;

      border-radius: 3px;

      }


  2. 다음 스타일 시트를 기본 창(개별 버튼이 아님)에 추가했기 때문에 세 개의 버튼이 파란색입니다.
  3. 나는 당신이 익숙할 수도 있는 다음 스타일 시트를 메인 창에 추가하여 Qt에서 pseudo-states(의사 상태)가 무엇인지 설명할 것입니다.

    << code >>

    QPushButton:hover {

    color: white;

    background-color: #66c011;

    border-width: 0px;

    border-radius: 3px;

    }


  4. 이전 스타일 시트를 사용하여 로그인 화면 만들기 레시피에서 앞의 스타일 시트를 사용하여 마우스 오버 이벤트가 있을 때 버튼의 색상이 변경되도록 했습니다. 이것은 Qt 스타일 시트의 의사 상태에 의해 가능합니다. 이 경우 콜론으로 QPushButton 클래스와 분리된 단어 hover입니다. 모든 위젯에는 활성, 비활성화 및 활성화와 같은 일반 의사 상태 집합과 해당 위젯 유형에 적용할 수 있는 의사 상태 집합이 있습니다. 예를 들어 개방 및 평면과 같은 상태는 QPushButton에 대해 사용할 수 있지만 QLineEdit에는 사용할 수 없습니다. 사용자가 버튼을 클릭할 때 버튼의 색상을 노란색으로 변경하기 위해 눌린 의사 상태를 추가해 보겠습니다.

    << code >>

    QPushButton:pressed {

    color: white;

    background-color: yellow;

    border-width: 0px;

    border-radius: 3px;

    }


  5. 의사 상태를 사용하면 적용되는 조건에 따라 다른 스타일 시트 세트를 로드할 수 있습니다. Qt는 Qt 스타일 시트에서 동적 속성을 구현하여 이 개념을 더욱 발전시킵니다. 이를 통해 사용자 정의 조건이 충족되었을 때 위젯의 스타일 시트를 변경할 수 있습니다. 이 기능을 사용하여 Qt의 사용자 정의 속성을 사용하여 설정할 수 있는 사용자 정의 조건을 기반으로 버튼의 스타일 시트를 변경할 수 있습니다. 먼저 이 스타일 시트를 기본 창에 추가합니다.

    << code >>

    QPushButton[pagematches=true] {

    color: white;

    background-color: red;

    border-width: 0px;

    border-radius: 3px;

    }


  6. pagematches 속성이 true를 반환하면 푸시 버튼의 배경색이 빨간색으로 변경됩니다. 분명히 이 속성은 QPushButton 클래스에 존재하지 않습니다. 그러나 QObject::setProperty()를 사용하여 버튼에 추가할 수 있습니다.

    << code >>

    QPushButton[pagematches=true] {

    color: white;

    background-color: red;

    border-width: 0px;

    border-radius: 3px;

    }


    1. mainwindow.cpp 소스 코드에서 ui->setupUi(this) 바로 뒤에 다음 코드를 추가합니다.

    2. 앞의 코드는 pagematches라는 사용자 정의 속성을 첫 번째 버튼에 추가하고 해당 값을 true로 설정합니다. 이렇게 하면 기본적으로 첫 번째 버튼이 빨간색으로 바뀝니다.

    3. 그런 다음 탭 위젯을 마우스 오른쪽 버튼으로 클릭하고 Go to Slot...을 선택합니다. 그러면 창이 팝업됩니다. 목록에서 currentChanged(int) 옵션을 선택하고 확인을 클릭합니다. Qt는 다음과 같은 슬롯 기능을 생성합니다.
    4. 탭 위젯의 페이지를 변경할 때마다 슬롯 함수가 호출됩니다. 그런 다음 슬롯 기능에 코드를 추가하여 원하는 작업을 결정할 수 있습니다. 그렇게 하려면 mainwindow.cpp를 열면 거기에 함수 선언이 표시됩니다. 함수에 몇 가지 코드를 추가해 보겠습니다
      << code >>
      void MainWindow::on_tabWidget_currentChanged(int index)
      {
          // Set all buttons to false
          ui->Page1->setProperty("pagematches", false);
          ui->Page2->setProperty("pagematches", false);
          ui->Page3->setProperty("pagematches", false);

          // Set one of the buttons to true
          if (index == 0)
              ui->Page1->setProperty("pagematches", true);
          else if (index == 1)
              ui->Page2->setProperty("pagematches", true);
          else
              ui->Page3->setProperty("pagematches", true);

          // Update buttons style
          ui->Page1->style()->polish(ui->Page1);
          ui->Page2->style()->polish(ui->Page2);
          ui->Page3->style()->polish(ui->Page3);
      }

  7. 앞의 코드는 탭 위젯이 현재 페이지를 전환할 때 세 버튼 모두의 pagematches 속성을 false로 설정합니다. 어떤 버튼이 빨간색으로 바뀔지 결정하기 전에 모든 것을 재설정해야 합니다.
  8. 현재 페이지의 인덱스 번호를 알려주는 이벤트 신호에 의해 제공된 인덱스 변수를 확인하십시오. 인덱스 번호를 기반으로 버튼 중 하나의 pagematches 속성을 true로 설정합니다.
  9. Polish()를 호출하여 세 버튼 모두의 스타일을 새로 고칩니다. mainwindow.h에 다음 헤더를 추가할 수도 있습니다.
    << code >>
    #include <QStyle>

  10. 프로젝트를 빌드하고 실행합니다. 이제 탭 위젯을 다른 페이지로 전환할 때마다 세 개의 버튼이 빨간색으로 변경되는 것을 볼 수 있습니다. 또한 버튼은 마우스 오버 시 녹색으로 변경되고 클릭 시 노란색으로 변경됩니다.

Qt는 사용자에게 모든 유형의 위젯에 자신의 사용자 정의 속성을 추가할 수 있는 자유를 제공합니다. 사용자 정의 속성은 Qt가 기본적으로 이러한 컨텍스트를 제공하지 않는 특수 조건이 충족될 때 특정 위젯을 변경하려는 경우 매우 유용합니다. 이를 통해 사용자는 Qt의 유용성을 확장하고 맞춤형 솔루션을 위한 유연한 도구를 만들 수 있습니다. 예를 들어 기본 창에 버튼 행이 있고 탭 위젯이 현재 표시하고 있는 페이지에 따라 색상을 변경해야 하는 경우 버튼이 색상을 변경해야 할 때를 알 방법이 없습니다. Qt 자체에는 이러한 유형의 상황에 대한 기본 제공 컨텍스트가 없기 때문입니다. 이 문제를 해결하기 위해 Qt는 QObject::setProperty()라는 일반 함수를 사용하는 위젯에 자체 속성을 추가하는 방법을 제공합니다. 사용자 정의 속성을 읽기 위해 QObject::property()라는 다른 함수를 사용할 수 있습니다.

다음으로 Qt 스타일 시트의 하위 컨트롤에 대해 이야기하겠습니다. 종종 위젯은 단일 개체가 아니라 더 복잡한 위젯을 형성하는 데 사용되는 둘 이상의 개체 또는 컨트롤의 조합입니다. 이러한 개체를 하위 컨트롤이라고 합니다.

예를 들어 스핀 상자 위젯에는 입력 필드, 아래쪽 버튼, 위쪽 버튼, 위쪽 화살표 및 아래쪽 화살표가 포함되어 있으며 이는 다른 위젯에 비해 상당히 복잡합니다. 이 경우 Qt는 원하는 경우 스타일 시트를 사용하여 모든 하위 컨트롤을 변경할 수 있도록 하여 더 많은 유연성을 제공합니다. 위젯의 클래스 이름 뒤에 있는 하위 컨트롤의 이름을 이중 콜론으로 구분하여 지정하면 됩니다. 예를 들어 다운 버튼의 이미지를 스핀 상자로 변경하려면 다음과 같이 스타일 시트를 작성할 수 있습니다.

<< code >>
QSpinBox::down-button {
image: url(:/images/spindown.png);
subcontrol-origin: padding;
subcontrol-position: right bottom;
}
그러면 이미지가 내 스핀 상자의 아래쪽 버튼에만 적용되고 위젯의 다른 부분에는 적용되지 않습니다. 사용자 정의 속성, 의사 상태 및 하위 제어를 결합하여 Qt는 사용자 인터페이스를 사용자 정의할 수 있는 매우 유연한 방법을 제공합니다.


1.6 스타일 시트의 리소스 사용

 Qt는 나중에 사용할 수 있도록 프로그램 실행 파일에 모든 유형의 파일을 저장할 수 있는 플랫폼 독립적 리소스 시스템을 제공합니다. 이미지, 오디오, 비디오, HTML, XML, 텍스트 파일, 바이너리 파일 등 실행 파일에 저장할 수 있는 파일 유형에는 제한이 없습니다.

리소스 시스템은 애플리케이션에서 언제든지 액세스할 수 있도록 리소스 파일(예: 아이콘 및 번역 파일)을 실행 파일에 포함하는 데 유용합니다. 이를 달성하려면 .qrc 파일에서 리소스 시스템에 추가하려는 파일을 Qt에 알려야 하고 Qt는 빌드 프로세스 중에 나머지를 처리합니다.

프로젝트에 새 .qrc 파일을 추가하려면 File | New File or Project... 에서 File and Clsses의 Qt를 선택하고 Qt Resource File을 선택합니다. 그런 다음 이름(즉, 리소스)을 지정하고 다음 버튼을 클릭한 후 마침 버튼을 클릭합니다. 이제 .qrc 파일이 생성되고 Qt Creator에 의해 자동으로 열립니다. Qt Creator가 자원을 관리하기 위한 사용자 인터페이스를 제공하므로 XML 형식으로 .qrc 파일을 직접 편집할 필요가 없습니다.

프로젝트에 이미지와 아이콘을 추가하려면 이미지와 아이콘이 프로젝트 디렉토리에 있는지 확인해야 합니다. .qrc 파일에 마우스 오른쪽 버튼을 클릭하여 Add Prefix 선택하여 리소스를 관리할 수 있다. Prefix는 프로젝트에 많은 리소스가 있을 때 더 잘 관리할 수 있도록 리소스를 분류하는 데 사용됩니다.

  1. 방금 만든 Prefix의 이름을 /icons로 바꿉니다.
  2. Add를 클릭한 다음 Prefix 추가를 클릭하여 다른 Prefix를 생성합니다.
  3. 새 Prefix의 이름을 /images로 바꿉니다.
  4. /icons Prefix를 선택하고 Add를 클릭한 다음 파일 추가를 클릭합니다.
  5. 파일 선택 창이 나타납니다. 이것을 사용하여 모든 아이콘 파일을 선택하십시오. 키보드의 Ctrl 키를 누른 상태에서 파일을 클릭하여 선택하면 한 번에 여러 파일을 선택할 수 있습니다. 완료되면 열기를 클릭합니다.
  6. /images 접두사를 선택하고 추가 버튼을 클릭한 다음 파일 추가 버튼을 클릭합니다. 파일 선택 창이 다시 뜨는데 이번에는 배경 이미지를 선택하겠습니다.
  7. 이전 단계를 반복하되 이번에는 /images 접두사에 로고 이미지를 추가합니다. Ctrl + S를 눌러 완료하면 저장하는 것을 잊지 마십시오. .qrc 파일은 이제 다음과 같아야 합니다.

  8. mainwindow.ui 파일로 돌아가십시오. 방금 프로젝트에 추가한 리소스를 활용해 보겠습니다. 상단 패널에 있는 다시 시작 버튼을 선택합니다. 아이콘 속성이 표시될 때까지 속성 편집기를 아래로 스크롤합니다. 드롭다운 화살표 아이콘이 있는 작은 버튼을 클릭하고 메뉴에서 리소스 선택을 클릭합니다.
  9. 리소스 선택 창이 나타납니다. 왼쪽 패널에서 아이콘 접두사를 클릭하고 오른쪽 패널에서 다시 시작 아이콘을 선택합니다. 확인을 누릅니다.

  10. 버튼에 작은 아이콘이 나타납니다. 기본 아이콘 크기가 16 x 16으로 설정되어 있기 때문에 아이콘이 매우 작게 보입니다. iconSize 속성을 50 x 50으로 변경하면 아이콘이 더 크게 표시되는 것을 볼 수 있습니다. 종료 버튼에 대해 이전 단계를 반복하되 이번에는 종료 아이콘을 대신 선택합니다.
  11. 이제 두 개의 버튼이 다음과 같아야 합니다.

  12. 리소스 파일에 추가한 이미지를 로고로 사용합시다. 로고 위젯을 선택하고 앞서 추가한 스타일 시트를 제거하여 윤곽선을 렌더링합니다.
  13. pixmap속성이 보일 때까지 속성 편집기를 아래로 스크롤합니다.
  14. pixmap 속성 뒤에 있는 작은 드롭다운 버튼을 클릭하고 메뉴에서 리소스 선택을 선택합니다. 로고 이미지를 선택하고 확인을 클릭합니다. 로고 크기가 더 이상 이전에 설정한 치수를 따르지 않습니다. 대신 이미지의 실제 치수를 따릅니다. 이것이 단순히 픽스맵 속성이 작동하는 방식이기 때문에 치수를 변경할 수 없습니다.
  15. 로고의 크기를 더 많이 제어하려면 픽스맵 속성에서 이미지를 제거하고 대신 스타일 시트를 사용할 수 있습니다. 다음 코드를 사용하여 아이콘 컨테이너에 이미지를 적용할 수 있습니다.
  16. 이미지의 경로를 얻으려면 파일 목록 창에서 이미지 이름을 마우스 오른쪽 버튼으로 클릭하고 경로 복사를 선택합니다. 경로는 운영 체제의 클립보드에 저장되며 이제 이전 스타일 시트에 붙여넣을 수 있습니다. 이 방법을 사용하면 이미지가 스타일을 적용한 위젯의 크기에 맞는지 확인할 수 있습니다. 이제 로고가 다음 스크린샷과 같이 표시됩니다.

  17. 스타일 시트를 사용하여 바탕 화면 이미지를 배경에 적용합니다. 배경 크기는 창 크기에 따라 달라지므로 여기에서는 픽스맵을 사용할 수 없습니다. 대신 스타일 시트에서 border-image 속성을 사용합니다. 기본 창을 마우스 오른쪽 버튼으로 클릭하고 스타일 시트 변경...을 선택하여 스타일 시트 편집 창을 엽니다. CentralWidget의 스타일 시트 아래에 새 줄을 추가합니다.

    << code >>

    #centralwidget {

    background-color: rgba(32, 80, 96, 100);

    border-image: url(:/imses/resources/login_bg.png);

    }


  18. 정말 간단하고 쉽습니다! 이제 로그인 화면이 다음과 같아야 합니다.

1.5.5 스타일 시트를 사용하여 로그인 화면 만들기

 아직 끝나지 않았습니다! 이전 레시피(1.5.4 스타일 시트를 사용하여 로그인 화면 만들기)를 보면 로그인 양식과 로고는 그 아래의 수직 스페이서로 인해 기본 창 상단에 붙어 있습니다. 로고와 로그인 양식은 메인 창 상단이 아닌 중앙에 위치해야 합니다. 이 문제를 해결하려면 다음 단계를 따르세요.

  1. 상단 패널과 로고 레이아웃 사이에 또 ​​다른 수직 스페이서를 추가하면 정렬의 균형을 맞추는 하단의 스페이서에 대응합니다.
  2. 로고가 로그인 양식에 너무 가깝게 붙어 있다고 생각되면 로고의 레이아웃과 로그인 양식의 레이아웃 사이에 수직 스페이서를 추가할 수 있습니다. sizeType 속성을 Fixed로 설정하고 Height 속성을 10으로 설정합니다.

  3. 상단 패널의 레이아웃을 마우스 오른쪽 버튼으로 클릭하고 Morph into | QWidget 이름을 topPanel로 바꿉니다. 레이아웃에는 여백 이외의 속성이 없기 때문에 레이아웃에 스타일 시트를 적용할 수 없기 때문에 레이아웃을 QWidget으로 변환해야 합니다.

  4. main window 의 가장자리 주위에 약간의 여백이 있습니다. 여백을 제거하려면 MainWindow 패널 바로 아래에 있는 Object Inspector 창에서 centralWidget 개체를 선택하고 모든 여백 값을 0으로 설정합니다.

  5. 실행 버튼(녹색 화살표 아이콘 포함)을 클릭하여 프로젝트를 실행하여 프로그램이 어떻게 생겼는지 확인합니다. 모든 것이 잘 되었다면 다음과 같이 표시되어야 합니다.

  6. 스타일시트로 UI를 꾸며보자! 모든 중요한 위젯에 개체 이름이 지정되었기 때문에 기본 창에서 스타일 시트를 적용하는 것이 더 쉽습니다. 스타일 시트를 기본 창에만 작성하고 계층 구조 트리를 상속하도록 하기 때문입니다.
  7. Object Inspector 창에서 MainWindow를 마우스 오른쪽 버튼으로 클릭하고 Change styleSheet...를 선택합니다.
  8. 스타일 시트에 다음 코드를 추가합니다.

    << code >>

    #centralWidget {

    background: rgba(32, 80, 96, 100);

    }


  9. 기본 창의 배경색이 변경됩니다. 다음 스타일 시트에서 리소스 사용 섹션에서 배경 이미지를 사용하는 방법을 배웁니다. 따라서 색상은 일시적입니다.
  10. Qt에서 메인 윈도우 자체에 스타일을 적용하려면 윈도우가 컨테이너일 뿐이기 때문에 메인 윈도우 대신에 해당하는 centralWidget에 스타일을 적용해야 합니다.
  11. 상단 패널에 멋진 그라디언트 색상을 추가합니다.

    << code >>

    #topPanel {

    background-color: qlineargradient(spread:reflect, x1:0.5, y1:0, x2:0, y2:0, stop:0 rgba(91, 204, 233, 100), stop:1 rgba(32, 80, 96, 100));

    }


  12. 로그인 폼에 검은색을 적용하여 반투명하게 보이게 합니다. 또한 border-radius 속성을 설정하여 로그인 양식 컨테이너의 모서리를 약간 둥글게 만들 것입니다.

    << code>>

    #loginForm {

    background: rgba(0, 0, 0, 80);

    border-radius: 8px;

    }


  13. 일반 유형의 위젯에 스타일 적용:

    << code >>

    QLabel { color: white; }

    QLineEdit { border-radius: 3px; }


  14. 앞의 스타일 시트는 모든 레이블의 텍스트를 흰색으로 변경합니다. 여기에는 위젯의 텍스트도 포함됩니다. 내부적으로 Qt는 텍스트가 있는 위젯에 동일한 유형의 레이블을 사용하기 때문입니다. 또한 라인 편집 위젯의 모서리를 약간 둥글게 만들었습니다.
  15. UI의 모든 푸시 버튼에 스타일 시트를 적용합니다.

    << code >>

    QPushButton {

    color: white;

    background-color: #27a9e3;

    border-width: 0px;

    border-radius: 3px;

    }


  16. 앞의 스타일 시트는 모든 버튼의 텍스트를 흰색으로 변경한 다음 배경색을 파란색으로 설정하고 모서리도 약간 둥글게 만듭니다.
  17. 더 나아가기 위해 hover 키워드를 사용하여 마우스를 올려놓았을 때 푸시 버튼의 색상이 변경되도록 만들 것입니다.

    << code >>

    QPushButton:hover { background-color: #66c011; }


  18. 앞의 스타일 시트는 푸시 버튼 위에 마우스를 올려 놓으면 푸시 버튼의 배경색을 녹색으로 변경합니다. 이에 대해서는 다음 속성 및 하위 컨트롤 사용자 지정 섹션에서 자세히 설명합니다.
  19. 위젯의 크기와 여백을 추가로 조정하여 더 보기 좋게 만들 수 있습니다. 앞서 6단계에서 직접 적용한 스타일 시트를 제거하여 로그인 양식의 경계선을 제거하는 것을 잊지 마십시오.
  20. 로그인 화면은 다음과 같아야 합니다.

2021년 8월 14일 토요일

1.5.4 스타일 시트를 사용하여 로그인 화면 만들기

 아직 로그인 양식이 완료되지 않았습니다. 이제 로그인 양식에 대한 컨테이너를 만들었으므로 양식에 더 많은 위젯을 넣을 차례입니다.

  1. 두 개의 Horizontal Layout을 로그인 양식 컨테이너에 배치합니다. 두 개의 레이아웃은 하나는 사용자 이름 필드용이고 다른 하나는 암호 필드용입니다.
  2. 방금 추가한 각 레이아웃에 Label 및 Line Edit을 추가합니다. 위쪽 레이블의 text 속성을 Username:으로 변경하고 아래쪽 레이블을 Password:로 변경합니다. 두 줄 편집의 이름을 각각 사용자 이름과 암호로 바꿉니다.
  3. 비밀번호 레이아웃 아래에 푸시 버튼을 추가하고 텍스트 속성을 로그인으로 변경합니다. 이름을 loginButton으로 바꿉니다.
  4. 비밀번호 레이아웃과 로그인 버튼 사이에 수직 스페이서를 추가하여 약간의 거리를 둘 수 있습니다. 수직 스페이서를 배치한 후 sizeType 속성을 Fixed로 변경하고 Height를 5로 변경합니다.

  5. loginForm 컨테이너를 선택하고 모든 여백을 35로 설정합니다. 이는 모든 측면에 약간의 공간을 추가하여 로그인 양식을 더 보기 좋게 만들기 위한 것입니다.

  6. Username, Password 및 loginButton 위젯의 Height 속성을 25로 설정하여 비좁게 보이지 않도록 합니다.
  7. UI는 다음과 같아야 합니다.

1.5.3 스타일 시트를 사용하여 로그인 화면 만들기

 이제 다음 단계를 사용하여 로그인 양식을 생성해 보겠습니다.

  1. 로고 레이아웃과 수직 스페이서 사이에 수평 레이아웃을 추가합니다. layoutTopMargin 속성을 큰 수(100)로 설정하면 위젯을 더 쉽게 추가할 수 있습니다.

  2. 방금 만든 가로 레이아웃 안에 세로 레이아웃을 추가합니다. 이 레이아웃은 로그인 양식의 컨테이너로 사용됩니다. 위젯을 배치할 수 있도록 layoutTopMargin을 수평 레이아웃보다 낮은 숫자(20)로 설정합니다.

  3. 방금 만든 세로 레이아웃을 마우스 오른쪽 버튼으로 클릭하고 Morph into | QWidget을 클릭한다. 세로 레이아웃이 빈 위젯으로 변환된다. 이 단계는 로그인 양식에 대한 컨테이너의 너비와 높이를 조정할 것이기 때문에 필수적입니다. 레이아웃 위젯은 너비와 높이에 대한 속성을 포함하지 않고 여백만 포함합니다. 레이아웃이 주변의 빈 공간으로 확장된다는 사실 때문에 크기 속성이 없다는 점을 고려하면 의미가 있습니다. 레이아웃을 QWidget 객체로 변환한 후에는 자동으로 위젯 클래스의 모든 속성을 상속하므로 이제 필요에 맞게 크기를 조정할 수 있습니다.
  4. 레이아웃에서 방금 변환한 QWidget 객체의 이름을 loginForm으로 바꾸고 수평 정책 및 수직 정책 속성을 모두 고정으로 변경합니다. minimumSize 매개변수를 350 x 200으로 설정합니다.
  5. 가로 레이아웃 안에 이미 loginForm 위젯을 배치했으므로 이제 layoutTopMargin 속성을 다시 0으로 설정할 수 있습니다.

  6. 로고와 동일한 스타일 시트를 loginForm 위젯에 추가하여 일시적으로 표시되도록 합니다. 단, 이번에는 ID 선택기를 앞에 추가하여 하위 위젯이 아닌 loginForm에만 스타일을 적용해야 한다는 점을 제외하고는 다음과 같습니다.

    << code >>

    #loginForm { border: 1px solid; }


  7. UI는 다음과 같아야 합니다

1.5.2 스타일 시트를 사용하여 로그인 화면 만들기

 다음으로 다음 단계를 사용하여 로고를 추가합니다.

  1. 상단 패널과 수직 스페이서 사이에 Horizontal Layout을 추가하여 로고의 컨테이너 역할을 합니다.
  2. 수평 레이아웃을 추가한 후에는 레이아웃이 높이가 너무 얇아서(거의 0 높이) 위젯을 추가할 수 없다는 것을 알게 될 것입니다. 이는 레이아웃이 비어 있고 그 아래의 수직 스페이서에 의해 높이가 0이 되기 때문입니다. 이 문제를 해결하기 위해 위젯이 레이아웃에 추가될 때까지 세로 여백(layoutTopMargin 또는 layoutBottomMargin)을 일시적으로 더 크게 설정할 수 있습니다.

  3. 방금 만든 가로 레이아웃에 label을 추가하고 이름을 logo로 바꿉니다. 다음 스타일 시트에서 리소스 사용 섹션에서 로고로 사용하기 위해 레이블에 이미지를 삽입하는 방법에 대해 자세히 알아볼 것입니다. 지금은 텍스트 속성을 비우고 수평 정책 및 수직 정책 속성을 모두 고정으로 설정합니다. minimumSize 속성을 150 x 150으로 설정합니다.

  4. 레이아웃의 세로 여백을 아직 설정하지 않은 경우 다시 0으로 설정합니다.
  5. 이제 로고가 보이지 않는 것처럼 보이므로 다음 스타일 시트의 리소스 사용 섹션에서 이미지를 추가할 때까지 임시 스타일 시트를 배치하여 표시되도록 하겠습니다. 스타일 시트는 정말 간단합니다.

    << code >>

    border: 1px solid;


  6. UI는 다음과 유사해야 합니다.

1.5.1 스타일 시트를 사용하여 로그인 화면 만들기

 이전 예제에서 배운 모든 지식을 통합하고 가상의 운영 체제에 대한 로그인 화면을 만드는 방법을 배웁니다. 스타일 시트는 좋은 UI를 디자인하기 위해 마스터해야 하는 유일한 것이 아닙니다. Qt Designer의 레이아웃 시스템을 사용하여 위젯을 깔끔하게 배열하는 방법도 배워야 합니다.

  1. 작업을 시작하기 전에 그래픽 로그인 화면의 레이아웃을 디자인해야 합니다. 좋은 소프트웨어를 만들기 위해서는 기획이 매우 중요합니다. 다음은 로그인 화면이 어떻게 보이는지 보여주기 위해 만든 샘플 레이아웃 디자인입니다. 메시지를 명확하게 전달하는 한 다음과 같은 간단한 선 그리기로 충분합니다.

  2. 다시 Qt Designer로 돌아가십시오.
  3. 먼저 상단 패널에 위젯을 배치한 다음 그 아래에 로고와 로그인 양식을 배치합니다.
  4. 기본 창을 선택하고 너비와 높이를 각각 400과 300에서 800과 600으로 변경합니다. 모든 위젯을 배치할 더 큰 공간이 필요하기 때문입니다.
  5. 위젯 상자의 Display Widgets 아래에 있는 label을 클릭하여 Form편집기에 배치합니다.
  6. 레이블의 objectName 속성을 currentDateTime으로 변경하고 해당 text 속성을 2021년 08월 15일 일요일 오전 6시 20분과 같이 표시 목적으로만 현재 날짜 및 시간으로 변경합니다.

  7. 버튼 카테고리 아래의 PushButton을 클릭하여 Form편집기로 가져옵니다. 상단 패널에 두 개의 버튼이 있으므로 이 과정을 한 번 더 반복합니다. 두 버튼의 이름을 restartButton 및 shutdownButton으로 바꿉니다.

  8. Main window을 선택하고 양식 도구 모음에서 마우스를 가져갔을 때 Layout Vertical이라고 표시된 작은 아이콘 버튼을 클릭합니다. 위젯이 기본 창에 자동으로 정렬되는 것을 볼 수 있지만 아직 정확히 원하는 것은 아닙니다.

  9. 레이아웃 카테고리 아래의 Horizontal Layout 위젯을 클릭하고 메인 창으로 드래그하세요.
  10. 두 개의 Push Button과 텍스트 Label을 클릭하여 수평 레이아웃으로 드레그하여 옮깁니다. 세 개의 위젯이 가로 행으로 배열되는 것을 볼 수 있지만 세로로는 화면 중앙에 있습니다. 수평 배열은 거의 정확하지만 수직 위치는 완전히 벗어났습니다.
  11. Spacers 범주에서 Vertical Spacer를 클릭하고 끌어서 이전 단계에서 만든 수평 레이아웃 아래(빨간색 직사각형 윤곽 아래)에 놓습니다. 모든 위젯은 스페이서에 의해 맨 위로 밀려납니다.

  12. 텍스트 레이블과 두 버튼 사이에 Horizontal Spacer를 배치하여 서로 떨어져 있도록 합니다. 이렇게 하면 텍스트 레이블이 항상 왼쪽에 고정되고 버튼이 오른쪽에 정렬됩니다.

  13. 두 버튼의 Horizontal Policy 및 Vertical Policy 속성을 모두 Fixed로 설정하고 minimumSize 속성을 55 x 55로 설정합니다. 텍스트 대신 아이콘을 사용할 것이기 때문에 버튼의 text 속성을 공백으로 설정합니다. 
  14. UI는 다음과 유사해야 합니다.


VITIS Git + Doxygen Config

 Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...