QT Windows dpi 변경으로 인한 인터페이스 예외 처리

문제: UI 인터페이스의 레이아웃을 사용하여 인터페이스를 디자인했지만 프로그램 실행 후 표시되는 인터페이스가 엉망이고 일부 수정 및 재구축 후에도 인터페이스가 런타임 중에 변경되지 않습니다.

목차

1. UI 디자인 인터페이스와 런타임 디스플레이 인터페이스 간의 불일치 문제를 해결합니다.

1. 이 현상의 원인은 다음과 같습니다. 디스플레이 해상도가 너무 높습니다.

2. 레이아웃 사용 및 컨트롤 크기 정책 설정

2. 인터페이스 수정 및 재구성 후에도 동작이 변하지 않는 문제 해결

1. UI 디자인 인터페이스와 런타임 디스플레이 인터페이스 간의 불일치 문제 해결
1. 이 현상의 원인은 디스플레이 해상도가 너무 높기 때문입니다.
예를 들어 4K 화면을 사용하고 있는데 일부 라벨에 텍스트가 있는 것을 발견했습니다. 완전히 표시되지 않습니다.

해결 방법: 인터넷에 있는 대부분의 방법은 기본 함수의 첫 번째 줄에 다음 코드를 추가하는 것입니다.

방법 1: 메인 기능 앞에 다음 문장을 추가합니다.이 기능은 버전 5.6에서만 사용할 수 있었습니다.

//方法1:在main函数的最前面加上下面这句 5.6版本才开始有这个函数
#if (QT_VERSION > QT_VERSION_CHECK(5,6,0))
    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

위의 코드를 추가한 후 인터페이스가 어느 정도 변경되었으나 여전히 내 디자인대로 표시되지 않고, 게다가 실수로 어떤 설정을 눌렀는지 알 수 없고 결과적으로도 알 수 없다. , 수정한 후 다시 빌드했는데 런타임에 인터페이스가 작동하지 않았습니다.


2. 레이아웃을 사용하고 각 레이아웃 구성요소의 기능에 맞게 sizePolicy 컨트롤을 설정합니다 .

수직 레이아웃: 수직 레이아웃, 구성 요소가 자동으로 수직 방향으로 배포됩니다.

가로 레이아웃: 가로 레이아웃, 구성요소가 자동으로 가로 방향으로 배치됩니다.

그리드 레이아웃(Grid Layout): 그리드 레이아웃으로, 그리드 레이아웃의 크기가 변경되면 각 그리드의 크기도 변경됩니다.

양식 레이아웃: 양식 레이아웃은 그리드 레이아웃과 유사하지만 그리드의 가장 오른쪽 열만 크기가 변경됩니다.

수평 간격재 : 수평 분리를 위해 사용되는 공간입니다.

수직 간격 장치: 수직 분리에 사용되는 공간입니다.

양식 크기가 변경될 때 인터페이스의 각 구성 요소가 자동으로 크기를 변경하도록 하려면 양식에 대한 일반 레이아웃을 개발해야 합니다.

양식에 따라 컨트롤을 조정하려면 가장 중요한 점은 위젯의 크기 정책을 설정하는 것입니다. sizePolicy를 설정하십시오.

컨트롤의 sizePolicy는 레이아웃 관리에서 컨트롤의 크기를 조정하는 방법을 설명합니다. Qt에서 제공하는 컨트롤에는 합리적인 기본 sizePolicy가 있지만 이 기본값이 모든 레이아웃에 적합하지 않을 수 있습니다. 개발자는 종종 양식의 일부 컨트롤에 대한 sizePolicy를 변경해야 합니다. QSizePolicy의 모든 변수는 수평 및 수직 방향 모두에 적용됩니다.

수정됨: 컨트롤을 확대하거나 축소할 수 없습니다. 컨트롤의 크기는 sizeHint입니다.

최소: 컨트롤의 sizeHint는 컨트롤의 최소 크기입니다. 컨트롤은 이 sizeHint보다 작을 수 없지만 확대할 수는 있습니다.

최대: 컨트롤의 sizeHint는 컨트롤의 최대 크기입니다. 컨트롤을 확대할 수는 없지만 허용되는 가장 작은 크기로 줄일 수 있습니다.

선호: 컨트롤의 sizeHint는 sizeHint이지만 확대하거나 축소할 수 있습니다.

Expandint: 컨트롤이 자체적으로 증가하거나 감소할 수 있습니다.

sizeHint(레이아웃 관리에서 컨트롤의 기본 크기, 컨트롤이 레이아웃 관리에 없으면 잘못된 값이 됩니다)

인터페이스를 컴퓨터 해상도에 맞게 조정하려면 모든 구성 요소의 sizePolicy에서 수평 정책과 수직 정책을 무시로 설정한 다음 레이아웃을 설정할 수 있습니다.

2. 인터페이스 수정 후 리팩토링 후에도 동작에 변화가 없는 문제 해결
주요 원인은 생성된 Ui_.h 에 모든 UI 컨트롤 레이아웃이 의존하기 때문에 생성된 ui_.h가 업데이트되지 않기 때문 입니다 .

1. 섀도우 빌드는 다양한 버전의 빌드를 생성하는 데 사용되는 보조 도구로, 프로젝트에서 섀도우 빌드를 선택 취소하고 프로젝트 옵션을 수정하면 실행 시 Qmake가 다시 실행되므로 UI ​​파일이 업데이트됩니다.

2. 디버그 모드와 릴리스 모드 사이를 전환합니다.

여기에 이미지 설명을 삽입하세요.

3. Qmake가 자동으로 Moc 및 Uic를 실행하므로 수정 후 Qmake를 실행합니다.

4. uic 도구 실행

A: uic -h: uic 도움말 보기

B: 프로젝트 디렉터리로 이동하여 uic mainwindow.ui > ui_mainwindow.h를 실행합니다. 그 중 mainwindow.ui는 업데이트된 UI 인터페이스 파일이고, mainwindow.h는 프로그램이 사용해야 하는 .h 파일입니다.

Supongo que te gusta

Origin blog.csdn.net/weixin_40933653/article/details/133016431
Recomendado
Clasificación