QT 프레임 워크
QT Essentials 모든 플랫폼에서 QT의 기초를 정의합니다. 모든 지원되는 개발 플랫폼 및 테스트 된 대상 플랫폼에서 사용할 수 있습니다.
요약:
1. QT 프레임 워크는 응용 프로그램 개발을 단순화하는 포괄적 인 C ++ 라이브러리 클래스 세트입니다.
2. QT는 높은 런타임 성능과 작은 풋 프린트를 사용하여 읽기 쉽고 관리 가능하며 재사용 가능한 코드를 생성합니다.
삼. QT는 크로스 플랫폼으로 개발자가 여러 플랫폼에 대한 응용 프로그램을 만들 수 있습니다.
4. QT Core, QT GUI, QT Multimedia, QT Network, QT Quick 및 QT SQL과 같은 QT Essentials는 모든 플랫폼에서 QT의 기초를 형성합니다.
5. QT는 QT OpenGL, QT Wayland Compositor, QT Sensors, QT WebView, QT Safe Renderer 및 QT SCXML과 같은 애드온을 제공합니다.
6. QT 프레임 워크는 잠재적 취약성 위협 및 보안 문제 해결의 우선 순위를 정합니다.
7. 개발자는 QT를 사용하기 전에 C ++에 대한 사전 지식이 있어야합니다.
8. QT 튜토리얼 시리즈는 C ++ 알림, QT 소개, QT 제작자 기능 소개, Windows 및 버튼 작성, QT 클래스 계층 등과 같은 주제를 다룹니다.
9. 관찰자 패턴, 신호 및 슬롯 및 전송 정보는 자습서 시리즈에서 다루는 고급 기능 중 일부입니다.
질문:
- QT는 c를 사용합니까?++?
예, QT는 주로 C ++로 작성되었으며 응용 프로그램 개발을위한 C ++ 라이브러리 클래스 세트를 제공합니다. - QT Essentials는 무엇입니까??
QT Essentials는 QT의 기초이며 QT Core, QT GUI, QT Multimedia, QT Network, QT Quick 및 QT SQL과 같은 모듈을 포함합니다. - QT 추가 기능은 무엇입니까??
일부 QT 추가 기능에는 QT OpenGL, QT Wayland Compositor, QT Sensors, QT WebView, QT Safe Renderer 및 QT SCXML이 포함됩니다. - QT는 보안의 우선 순위를 정하는 방법?
QT 그룹은 잠재적 취약성 및 보안 문제를 적극적으로 해결하고 QT 프로젝트 보안 정책에 요약 된 보안 정책을 따릅니다. - QT를 사용하는 데 필요한 지식?
개발자는 QT로 시작하기 전에 C ++에 대한 지식이 있어야합니다. - QT 튜토리얼 시리즈에서 다루는 주제?
자습서 시리즈는 C ++ 알림, QT 소개, QT 제작자 기능, Windows 및 버튼 작성, QT 클래스 계층 등과 같은 주제를 다룹니다. - 튜토리얼 시리즈에서 다루는 고급 기능?
튜토리얼 시리즈는 관찰자 패턴, 신호 및 슬롯 및 전송 정보와 같은 고급 기능을 다룹니다. - QT 크로스 플랫폼입니다?
예, QT는 크로스 플랫폼이며 개발자는 여러 플랫폼에서 실행되는 응용 프로그램을 만들 수 있습니다. - QT Essential 및 QT 추가 기능의 목적은 무엇입니까??
QT Essential은 QT의 기초를 제공하는 반면 QT 추가 기능은 특정 작업에 대한 추가 기능을 제공합니다. - QT는 어떻게 보안을 보장합니까??
QT는 취약성 보고서를 적극적으로 분석하고이를 해결하기 위해 즉각적인 조치를 취합니다. QT 그룹은 또한 보안 문제를위한 관련 조향 그룹에 참여합니다. - QT를 사용하면 어떤 이점이 있습니까??
QT는 개발자가 탁월한 런타임 성능으로 읽을 수 있고 유지 관리 가능한 코드를 작성할 수 있도록합니다. 또한 크로스 플랫폼 기능을 제공합니다. - QT 프레임 워크는 무엇입니까??
QT 프레임 워크는 응용 프로그램 개발을 단순화하고 모듈화를 제공하는 포괄적 인 C ++ 라이브러리 클래스 세트로 구성됩니다. - 관찰자 패턴은 무엇입니까??
관찰자 패턴은 피사체라고 불리는 객체가 그것에 의존하는 관찰자 목록을 유지하는 설계 패턴입니다. 피험자의 상태가 변경되면 모든 관찰자가 자동으로 업데이트하도록 알립니다. - 신호와 슬롯이란 무엇입니까??
신호와 슬롯은 물체 간의 통신을위한 QT의 메커니즘입니다. 신호는 특정 이벤트가 발생할 때 물체에 의해 방출되며 슬롯은 신호를 수신하고 처리하기 위해 연결할 수있는 기능입니다. - Qt에서 정보를 전송할 수있는 방법?
정보는 신호 및 슬롯을 사용하여 QT에서 전송 될 수 있으며, 여기서 신호는 정보를 수신하고 처리하고 처리합니다.
답변:
1. QT는 c를 사용합니까?++?
예, QT는 주로 개발에 C ++를 사용합니다. 이를 통해 개발자는 QT 응용 프로그램에서 C ++ 언어의 전력과 유연성을 활용할 수 있습니다.
2. QT Essentials는 무엇입니까??
QT Essentials는 프레임 워크의 기초를 형성하는 QT의 기본 모듈입니다. 여기에는 QT Core, QT GUI, QT Multimedia, QT Network, QT Quick 및 QT SQL이 포함됩니다. 이들은 비 그래픽 클래스, 그래픽 사용자 인터페이스 구성 요소, 멀티미디어 지원, 네트워크 프로그래밍, 선언 애플리케이션 개발 및 SQL과 같은 애플리케이션 개발의 다양한 측면에 필수 기능을 제공합니다.
삼. QT 추가 기능은 무엇입니까??
QT는 특정 작업에 대한 추가 기능을 제공하는 다양한 애드온을 제공합니다. QT 애드온의 일부 예는 다음과 같습니다
- QT OpenGL : OpenGL 지원 클래스. QT GUI 모듈의 Qopengl 클래스에 찬성하여 더 이상 사용되지 않습니다.
- QT Wayland Compositor : Wayland Compositor 개발을위한 프레임 워크.
- QT 센서 : 센서 하드웨어 액세스 및 모션 제스처 인식 활성화 클래스.
- QT WebView : 전체 웹 브라우저 스택 대신 플랫폼 네이티브 API를 사용하여 QML 애플리케이션에 웹 컨텐츠를 표시 할 수있는 모듈.
- QT Safe Renderer : 기능 안전 시스템에서 경고 표시기와 같은 안전 크리티컬 항목을 렌더링하기위한 UI 렌더링 구성 요소를 제공합니다.
- QT SCXML : SCXML 파일에서 상태 머신을 생성하고 응용 프로그램에 포함시키는 클래스 및 도구를 제공합니다.
4. QT는 보안의 우선 순위를 정하는 방법?
QT 그룹은 보안 문제를 심각하게 받아들이고 잠재적 인 취약점을 해결하기위한 전용 접근법이 있습니다. QT는 오픈 소스 프로젝트로 개발되면서 취약성 보고서 분석은 지정된 직원 및 외부 기고자가 수행합니다. QT 그룹은 관련 조향 그룹에 적극적으로 참여하고 취약성 보고서를 받으면 즉시 조치를 취합니다. 취약성 보고서 처리에 대한 자세한 절차는 QT 프로젝트 보안 정책에 요약되어 있습니다.
5. QT를 사용하는 데 필요한 지식?
QT로 시작하기 전에 C를 잘 이해하는 것이 좋습니다++. QT는 개발에 C ++를 크게 활용하며 언어를 확실하게 이해하면 QT 프레임 워크 및 API를보다 쉽게 작업 할 수 있습니다.
6. QT 튜토리얼 시리즈에서 다루는 주제?
QT Tutorial 시리즈는 초보자가 QT 애플리케이션 개발을 시작하는 데 도움이되는 광범위한 주제를 다룹니다. 다루는 주제 중 일부는 다음과 같습니다
- 기본 사항을 새로 고치기위한 C ++ 알림
- QT, 그 기능 및 크로스 플랫폼 기능에 대한 소개
- QT SDK 설치 가이드
- QT 제작자 및 기능에 대한 개요
- 첫 번째 창을 만들고 컴파일 프로세스를 이해합니다
- 응용 프로그램에 버튼과 같은 대화식 요소 추가
- QT 클래스 계층 구조 및 Qobject 양육 개념 이해
- QWIDGET 서브 클래스 및 사용자 정의 위젯 생성
- 자료와 권장 사항을 추가로 읽습니다
7. 튜토리얼 시리즈에서 다루는 고급 기능?
기본 외에도 QT Tutorial 시리즈는보다 고급 주제를 탐구합니다. 다루는 고급 기능의 일부 예는 다음과 같습니다
- 관찰자 패턴 : 개념 탐색 및 QT 응용 프로그램에서이를 구현하는 방법
- 신호 및 슬롯 : 객체 간의 통신 메커니즘 이해
- 정보 전송 : 신호 및 슬롯을 사용하여 응용 프로그램의 다른 부분간에 정보를 전달하는 방법
- 신호 및 슬롯의 특징 : 신호 및 슬롯 메커니즘의 추가 기능 및 기능
8. QT 크로스 플랫폼입니다?
예, QT는 크로스 플랫폼 프레임 워크입니다. 이를 통해 개발자는 응용 프로그램을 한 번 작성하여 Windows, MacOS, Linux, Android 및 iOS를 포함한 여러 플랫폼에 배포 할 수 있습니다. QT는 플랫폼 별 세부 정보를 처리하는 추상화 및 API를 제공하여 다양한 운영 체제에서 일관되게 작동하는 응용 프로그램을보다 쉽게 개발할 수 있습니다.
9. QT Essential 및 QT 추가 기능의 목적은 무엇입니까??
QT Essentials는 응용 프로그램 개발에 널리 사용되는 핵심 기능 및 클래스를 제공하여 QT 프레임 워크의 기초를 형성합니다. 그들은 다른 플랫폼에서 일관되고 신뢰할 수있는 개발 경험을 보장합니다. 반면에 QT 추가 기능은 특정 사용 사례 또는 도메인에 더 특화된 추가 모듈 및 기능을 제공합니다. 필수품을 넘어서서 확장 된 기능과 기능을 제공합니다.
10. QT는 어떻게 보안을 보장합니까??
QT. QT 그룹은 관련 조향 그룹에 참여하고 취약성 보고서에 즉시 응답합니다. 또한 오픈 소스 프로젝트로서 QT는 외부 기고자를 초대하여 코드를 검토하고 분석하여 프레임 워크의 전반적인 보안을 향상시킵니다.
11. QT를 사용하면 어떤 이점이 있습니까??
응용 프로그램 개발을 위해 QT를 사용하는 데 몇 가지 이점이 있습니다
- QT는 응용 프로그램 개발을 단순화하는 포괄적 인 C ++ 라이브러리 클래스 세트를 제공하여 강력한 응용 프로그램을보다 빠르고 쉽게 구축 할 수 있습니다.
- QT를 사용하여 작성된 코드는 읽기 쉽고 유지 관리 가능하며 재사용 가능하며 개발 노력을 줄이고 생산성 향상.
- QT는 크로스 플랫폼으로 개발자가 응용 프로그램을 한 번 작성하여 여러 플랫폼에 배포 할 수 있습니다.
- 이 프레임 워크는 탁월한 런타임 성능을 제공하여 부드럽고 반응이 좋은 응용 프로그램을 보장합니다.
- QT는 작은 발자국이있어 결과 실행 파일이 작고 효율적입니다.
12. QT 프레임 워크는 무엇입니까??
QT 프레임 워크는 응용 프로그램 개발을위한 광범위한 기능을 제공하는 C ++ 라이브러리 클래스의 포괄적 인 컬렉션입니다. 모듈화 구조를 제공하여 개발자가 필요한 구성 요소 만 사용할 수 있습니다. QT. 개발 프로세스를 단순화하고 코드 재사용 홍보 및 크로스 플랫폼 애플리케이션 개발을 가능하게하도록 설계되었습니다.
13. 관찰자 패턴은 무엇입니까??
관찰자 패턴은 객체 간의 일대일 통신을 허용하는 행동 설계 패턴입니다. 관찰자 패턴에는 두 가지 주요 엔티티가 있습니다 : 주제와 관찰자. 대상은 관찰자 목록을 유지하고 상태가 변경 될 때 자동으로 통지합니다. 이 패턴은 물체 사이의 느슨한 커플 링을 촉진하고 매우 대화식 및 동적 시스템을 가능하게합니다. QT에서 관찰자 패턴은 신호 및 슬롯을 사용하여 구현 될 수 있으며, 이곳에서 피사체가 신호를 방출하고 관찰자가 슬롯을 신호에 연결하여 업데이트를받습니다.
14. 신호와 슬롯이란 무엇입니까??
신호와 슬롯. 신호는 특정 이벤트 또는 조건이 발생했음을 나타 내기 위해 방출 될 수있는 Qobject 유래 클래스의 특수 멤버 기능입니다. 슬롯은 신호를 수신하고 처리 할 수있는 멤버 기능입니다. 신호와 슬롯을 사용하여 물체 사이에 느슨한 커플 링을 설정하여 서로 밀접하게 연결하지 않고 통신 할 수 있습니다. 이것은 QT 애플리케이션 설계에서 모듈성과 유연성을 촉진합니다.
15. Qt에서 정보를 전송할 수있는 방법?
QT에서는 신호 및 슬롯을 사용하여 응용 프로그램의 다른 부분간에 정보를 전송할 수 있습니다. 신호는 매개 변수를 정의하여 정보를 전달할 수 있으며 슬롯은 해당 정보를 수신하고 처리 할 수 있습니다. 신호가 방출되면 모든 연결된 슬롯이 제공된 정보로 호출됩니다. 이 메커니즘은 객체가 서로 직접 참조하지 않고 데이터를 통신하고 교환 할 수있게하여 응용 프로그램 설계에서 느슨한 커플 링과 유연성을 촉진합니다.
QT 프레임 워크
QT Essentials 모든 플랫폼에서 QT의 기초를 정의합니다. 모든 지원되는 개발 플랫폼 및 테스트 된 대상 플랫폼에서 사용할 수 있습니다.
QT는 c를 사용합니까?++
об йтоэ странице
м е р р регистрировали подо 착취 ay rzа ф징퍼, исход 넘추 타 ay сети. с пом거나 ю это인지 страницы м주는 сможем определить, что з просы отправляете именно, а не робот. почему это могло произойти?
эта страница отобр은 Âется в тех Â сл 나아가 · 추, ∈огда автомати인지 скими системи Google регтрирр곽막우 ся 테 추 법구추 추 님. котор ое нарушают условия использования. странира перестанет отобр은 жаться после того, как эти запросы прекратся. до отого момента для использования слу 갑기 Google необ 영향.
источником запросов может служить вредоносное по, подключаемые модули браузера или скрипт, насое 밑 밑 밑보관 сзлку ыапросов. если вл используете общий доступ в интернет, проблема 갑새 갑새 딘 악 с сомпером с с с с с саким 테 IP-адесом → Â 궤. обратитесь к своему системному администратору. подроб 변태.
проверка по слову может татак뿐 아니라 자기 появляться, если вы В 갑 갑격적 В Â водите слож ные запросы, об협 ораспронон혁 ™ rапротототототототото술도 있습니다. емами, или вводите запросы очень часто.
QT 프레임 워크
QT 프레임 워크에는 포괄적 인 고도로 직관적이고 모듈화 된 C ++ 라이브러리 클래스 세트가 포함되어 있으며 응용 프로그램 개발을 단순화하기 위해 API가 장착되어 있습니다. QT는 높은 런타임 성능과 작은 발자국을 갖춘 매우 읽기 쉽고 쉽게 유지 관리 가능하며 재사용 가능한 코드를 생성합니다. 크로스 플랫폼입니다.
QT 필수품
진정한 크로스 플랫폼을 가능하게합니다
QT Essentials 모든 플랫폼에서 QT의 기초를 정의합니다. 모든 지원되는 개발 플랫폼 및 테스트 된 대상 플랫폼에서 사용할 수 있습니다.
QT 코어
다른 모듈에서 사용하는 핵심 비 그래픽 클래스.
QT GUI
그래픽 사용자 인터페이스 구성 요소를위한 기본 클래스. OpenGL 포함.
QT 멀티미디어
오디오, 비디오, 라디오 및 카메라 기능을위한 클래스.
QT 네트워크
네트워크 프로그래밍을보다 쉽고 휴대하기 쉬운 클래스.
QT 빠른
사용자 정의 사용자 인터페이스를 사용하여 동적 응용 프로그램을 구축하기위한 선언적 프레임 워크.
QT SQL
SQL을 사용한 데이터베이스 통합 클래스.
QT 애드온
올바른 애드온
올바른 작업을 위해
QT Essentials 모든 플랫폼에서 QT의 기초를 정의합니다. 모든 지원되는 개발 플랫폼 및 테스트 된 대상 플랫폼에서 사용할 수 있습니다.
QT OpenGL
OpenGL 지원 클래스. QT GUI 모듈의 Qopengl 클래스에 찬성하여 더 이상 사용되지 않습니다.
QT Wayland Compositor
Wayland Compositor를 개발하기위한 프레임 워크를 제공합니다.
QT 센서
센서 하드웨어 및 모션 제스처 인식에 대한 액세스를 제공합니다.
QT WebView
전체 웹 브라우저 스택을 포함 할 필요없이 플랫폼에 기본적으로 API를 사용하여 QML 애플리케이션에 웹 컨텐츠를 표시합니다.
QT 안전 렌더러
기능 안전 시스템에서 경고 표시기와 같은 안전 크리티컬 항목을 렌더링하는 데 사용할 수있는 UI 렌더링 구성 요소를 제공합니다.
QT SCXML
SCXML 파일에서 상태 머신을 생성하고 응용 프로그램에 포함시키는 클래스 및 도구를 제공합니다.
보안 문제 처리를위한 QT 프레임 워크 관행
QT 그룹은 잠재적 취약성 위협 및 제품의 보안 문제 해결의 우선 순위를 정합니다. 광범위한 크로스 플랫폼 적용 가능성과 광범위한 API를 통해 QT 프레임 워크는 다양한 전선의 사이버 위험에 취약합니다. 또한 QT는 오픈 소스 프로젝트로 개발되었으며 지정된 직원 및 외부 기고자의 취약성 보고서 분석이 필요합니다. 처음부터 QT 그룹은 관련 조향 그룹에 적극적으로 참여하고 취약성 보고서에 즉각적인 조치를 취합니다. 취약성 보고서는 QT 프로젝트 보안 정책에 요약 된 특정 절차에 의해 적용됩니다.
초보자를위한 QT
경고 : 시작하기 전에 C ++에 대한 지식이 있어야합니다!
주목 :이 튜토리얼 시리즈는 주로 QT4를 대상으로합니다. 이러한 자습서의 대부분이 QT5에도 유효하더라도 QT5의 경우는 별도의 부분에서 논의됩니다.
내용물
- 1 C ++ 알림
- 2 QT 소개
- 3 QT SDK 설치
- 4 QT 제작자 기능
- 5 우리의 첫 번째 창
- 6 QT 프로그램이 컴파일되는 방법
- 7 예쁜 버튼
- 8 QT 클래스 계층 구조
- 9 육아 시스템
- 10 서브 클래스 QWIDGET
- 11 추가 독서
- 12 관찰자 패턴
- 13 개의 신호 및 슬롯
- 14 정보 전송
- 신호 및 슬롯의 15 가지 기능
- 16 예
- 16.1 이벤트에 응답
- 21.1 사용자 정의 슬롯 생성
- 21.2 신호 생성
- 21.3 예
C ++ 알림
그만큼 서명 메소드 또는 함수는 단순히 프로토 타입입니다. 메소드 나 기능을 완전히 설명합니다. 반환 된 유형, 메소드/함수의 이름 (클래스 이름 포함) 및 유형을 포함한 매개 변수가 포함됩니다.
유형 myObject::myfunction( 유형 1 PARAM1, 타입 2 *param2, Const 타입 3 &이었다param3 );
Qt에 새로 생겼습니다? 시작 방법을 모릅니다? 그런 다음이 위키 페이지는 당신을위한 것입니다! QT의 모든 특이성과 기능을 제시하는 단계별 튜토리얼입니다. 더 배우고 싶습니다? QT 5의 C ++ GUI 클래스 및 QT 6의 C ++ GUI 클래스를 확인하십시오.
QT 소개
QT ( “cu-tee”가 아닌 “Cute”로 발음)는 일반적으로 그래픽 툴킷으로 사용되는 크로스 플랫폼 프레임 워크입니다. 세 가지 주요 데스크탑 OS와 Symbian, Nokia Belle, Meego Harmattan, Meego 또는 BB10과 같은 모바일 OS 및 임베디드 장치에서 실행됩니다. Android 용 포트 (EndressITAS) 및 iOS도 개발 중입니다.
QT에는 인상적인 모듈 모듈이 있습니다
- Qtcore, 컨테이너, 스레드 관리, 이벤트 관리 등을 제공하는 기본 라이브러리
- QTGUI 그리고 qtwidgets, 데스크탑 용 GUI 툴킷, 애플리케이션을 설계 할 수있는 많은 그래픽 구성 요소를 제공합니다.
- qtnetwork, 네트워크 커뮤니케이션을 다루는 유용한 클래스 세트를 제공합니다
- Qtwebkit, QT 애플리케이션에서 웹 페이지 및 웹 앱을 사용할 수있는 WebKit 엔진.
- QTSQL, 자체 드라이버와 함께 확장 가능한 전체 특집 SQL RDBM 추상화 레이어, ODBC, SQLITE, MYSQL 및 PostgreSQL에 대한 지원이 상자 밖으로 사용할 수 있습니다
- QTXML, 간단한 XML 파싱 (sax) 및 dom에 대한 지원
- qtxmlpatterns, XSLT, XPath, XQuery 및 Schema Validation 지원
QT SDK 설치
QT 응용 프로그램 작성을 시작하려면 QT 라이브러리를 받아야하며 원하는 경우 IDE. 소스에서 구축하거나 더 나은 다운로드 페이지에서 SDK로 다운로드 할 수 있습니다.
이 SDK에는 Symbian 및 Nokia N9의 크로스 컴파일러와 같은 많은 기능이 포함되어 있습니다. “사용자 정의 설치”를 선택하여 설치하지 않도록 선택할 수 있습니다. 이 패키지를 보관하십시오
- Qmake 문서화
- QT 문서
- QT 4.8.1 (데스크탑), QT 4를 가정합니다.8.1은 최신 버전입니다.
- QT 제작자
이 패키지도 유용 할 수 있습니다
- QT 예제
- QT 언어 학자
Symbian / Maemo / Meego를 위해 개발하려는 경우 또는 이전 버전의 QT를 사용하려면 다른 패키지를 선택할 수 있습니다.
NB : Linux에서는 분포가 제공하는 패키지를 사용하는 것이 좋습니다. QT Creator는 거의 모든 배포판에서 사용할 수 있어야하며 라이브러리, 컴파일러 및 개발 헤더와 같은 모든 종속성을 설치해야합니다.
메모: 대체 자습서는 QT 위젯 페이지로 시작하는 공식 참조.
우리는 이제 첫 번째 창을 만들 준비가되었습니다. 그리고 평소와 같이 a 안녕하세요 세계.
QT 제작자 기능
첫 번째 GUI 앱을 작성하기 전에 QT Creator를 발견합시다.
QT Creator는 C ++의 또 다른 IDE이지만 QT 응용 프로그램을 코딩하는 데 매우 적합합니다. Doc 브라우저와 “디자이너”를 제공하여 Windows 생성을 더 쉽게 만들 수 있으며 모두 잘 설계된 사용자 인터페이스로 싸여 있습니다. 또한 가장 빠른 IDE 중 하나입니다.
우리의 첫 번째 창
첫 번째 프로젝트를 만들부터 시작하겠습니다. 빈 프로젝트가되므로 파일> 새 파일 또는 프로젝트> 기타 프로젝트> 빈 QT 프로젝트를 진행해야합니다
마법사를 따르고 프로젝트 폴더와 이름을 선택하고 사용할 QT 버전을 선택한 후이 페이지에 착륙해야합니다
이것은 프로젝트 파일입니다 (확장 .찬성). QT는 컴파일러가 응용 프로그램을 빌드하기 위해 컴파일러에서 사용하는 파일 인 “makefiles”를 생성하기 위해 이러한 프로젝트 파일을 구문 분석하는 명령 줄 도구를 사용합니다. 이 도구를 호출합니다 Qmake. 그러나 QT 제작자가 우리를 위해 일을 할 것이기 때문에 QMake에 대해 너무 귀찮게해서는 안됩니다.
프로젝트 파일에는 항상 작성 해야하는 최소 코드가 있습니다
템플릿 = app target = name_of_the_app qt = core gui Greaterthan (qt_major_version, 4) : qt += 위젯
- 주형 빌드 할 유형을 설명합니다. 응용 프로그램, 라이브러리 또는 단순히 하위 디렉토리 일 수 있습니다.
- 표적 앱 또는 라이브러리의 이름입니다.
- QT 이 프로젝트에서 사용중인 라이브러리 (QT 모듈)를 나타내는 데 사용됩니다. 첫 번째 앱은 작은 GUI이므로 QTCore와 Qtgui가 필요합니다.
이제 응용 프로그램의 진입 점을 추가하겠습니다. 파일> 새 파일 또는 프로젝트> C ++> C ++ 소스 파일 사용 작업을 수행해야합니다.
“main”파일의 이름을 다시 한 번 마법사를 따라 가면 완료됩니다. 프로젝트 파일에서 QT Creator에 의해 새 라인이 자동으로 추가되었음을 알 수 있습니다
템플릿 = app target = name_of_the_app qt = core gui Greaterthan (qt_major_version, 4) : qt += 위젯 소스 += main.CPP
헤더 및 소스 파일은 수동으로 추가 할 수 있습니다
헤더 += First_File.h Second_file.H 소스 += First_File.CPP Second_File.CPP
헤더 += First_File.h Second_file.H 소스 += First_File.CPP Second_File.CPP
QT Creator ‘s Wizards를 사용하는 경우 자동으로 수행됩니다.
QT 응용 프로그램의 최소 소스 코드는 다음과 같습니다
#포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); 반품 앱.exec(); >
qapplication 매우 중요한 수업입니다. 입력 인수를 처리하지만 다른 많은 것들, 특히 이벤트 루프. 이벤트 루프는 GUI 애플리케이션에서 사용자 입력을 기다리는 루프입니다.
앱을 호출 할 때.exec () 이벤트 루프가 시작됩니다.
이 응용 프로그램을 컴파일하겠습니다. 왼쪽 하단의 녹색 화살표를 클릭하면 QT Creator가 컴파일하고 실행됩니다. 그리고 무슨 일이 있었는지? 응용 프로그램은 시작되어 응답하지 않는 것 같습니다. 그것은 실제로 정상입니다. 이벤트 루프가 GUI의 마우스 클릭과 같은 이벤트를 대기하고 대기 중이지만 처리 할 이벤트를 제공하지 않았으므로 무기한으로 실행됩니다.
표시 할 내용을 추가합시다.
#포함하다 #포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); QPUSHBUTTON 단추 ("안녕하세요 세계 !"); 단추.보여주다(); 반품 앱.exec(); >
그것을 컴파일하고… 여기 있습니다 ! 우리의 첫 번째 창 !
QT 프로그램의 편집 방법
QT Creator.
소규모 프로그램의 경우 손으로 모든 것을 컴파일하고 객체 파일을 작성 한 다음 연결하기 쉽습니다. 그러나 더 큰 프로젝트의 경우 명령 줄은 쉽게 쓰기가 어렵게됩니다. Linux에 익숙하다면 모든 프로그램이이 모든 명령 줄을 설명하는 Makefile을 사용하여 컴파일된다는 것을 알 수 있습니다. 그러나 일부 프로젝트의 경우 Makefile을 작성조차도 지루할 수 있습니다.
Qmake QT와 함께 제공되는 빌드 시스템이며, 당신을 위해 Makefiles를 생성합니다 (사용할 수있는 다른 빌드 시스템이 있지만 여기서는 예를 들어 Qmake)). 간단한 구문으로 QT 프로그램을 컴파일하는 데 사용되는 makefile을 생성합니다. 그러나 그것이 유일한 목적은 아닙니다. QT는 메타 오브젝트를 사용하여 C ++ 기능을 확장하며 QMake. 다른 장에서 이것을 볼 수 있습니다.
따라서 QT 앱은 3 단계로 컴파일됩니다
- ㅏ .찬성 파일은 컴파일 할 프로젝트를 설명하기 위해 작성되었습니다
- makefile은 사용하여 생성됩니다 Qmake
- 이 프로그램은 사용하여 구축되었습니다 만들다 (또는 nmake 또는 존 Windows에서)
예쁜 버튼
이 장에서는 위젯 모듈에 대한 개요를 제공합니다. 위젯 속성, 위젯에 사용되는 상속 체계 및 육아 시스템을 다룹니다.
이제 우리는 버튼을 가지고 있으므로 조금 사용자 정의하고 싶을 수도 있습니다.
QT 객체에는 getters and setters를 사용하여 수정할 수있는 많은 속성이 있습니다. QT에서 속성이 호출되는 경우 foo, 관련 Getter와 Setter는 이러한 서명을 갖습니다
티 foo() Const; 무효의 세트 푸(Const 티);
실제로, QT는이 속성과 getters 및 setters를 호출되는 것으로 확장합니다 재산. 속성은 액세스하거나 수정하거나 일정하게 액세스 할 수있는 모든 유형의 값이며 변경 사항을 알릴 수 있습니다. 속성 시스템은 특히 세 번째 부분 (QML)에서 유용합니다. 지금은 “속성”또는 “속성”을 사용하여 같은 일을합니다.
QpushButton에는 많은 속성이 있습니다
따라서 버튼을 사용자 정의하기 위해 이것들을 사용할 수 있습니다.
먼저 텍스트를 변경하고 툴팁을 추가합시다
#포함하다 #포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); QPUSHBUTTON 단추; 단추.setText("내 텍스트"); 단추.Settooltip("툴팁"); 단추.보여주다(); 반품 앱.exec(); >
결과는 다음과 같습니다
우리는 또한 글꼴을 변경할 수 있습니다. QT에서는 글꼴이 QFONT 클래스로 표시됩니다. 문서는 많은 정보를 제공합니다. 우리는 특히 여기에서 Qfont의 생성자 중 하나에 관심이 있습니다.
Qfont(Const Qstring &이었다 가족, int 지적 = -1, int 무게 = -1, 부 이탤릭체 = 거짓))
글꼴을 변경하려면 QFONT 클래스를 인스턴스화하고 SetFont를 사용하여 QPUSHBUTTON에 전달해야합니다 . 다음 스 니펫은 글꼴을 택배로 바꿀 것입니다.
Qfont 폰트 ("택배원"); 단추.세트 폰트(폰트);
이 장의 첫 번째 그림에 표시된 버튼을 재현하려면 QFONT 생성자의 다른 매개 변수를 시도해 볼 수 있습니다.
아이콘을 설정하는 것도 그리 어렵지 않습니다. 아이콘은 Qicon 클래스로 표시됩니다. 파일 시스템에 절대 (또는 상대) 경로가있는 경우 아이콘을 만들 수 있습니다. 이 예에서 절대 경로를 제공하는 것이 좋습니다. 그러나 배포 고려 사항의 경우 상대 경로를 사용할 수 있습니다.
Qicon 상 ("/path/to/my/iCon/Icon.PNG "); 단추.seticon(상);
Linux 및 기타 OS의 경우 아이콘 테마에서 아이콘을 설정하는 편리한 방법이 있습니다. 정적 방법을 사용하여 수행 할 수 있습니다
Qicon Qicon::제발에서 ( Const Qstring &이었다이름, Const Qicon &이었다폴백 = Qicon());
예를 들어,이 장의 시작 부분의 스크린 샷에서 Smiley는 산소 KDE 아이콘 테마에서 유래하며 다음과 같이 설정했습니다
단추.seticon(Qicon::제발에서("페이스 스마일"));
QT 클래스 계층
QT는 특히 위젯 모듈에서 상속을 널리 사용합니다. 다음 그래프는 이러한 상속 중 일부를 보여줍니다
Qobject는 Qt에서 가장 기본적인 클래스입니다. QT의 대부분의 수업은이 수업에서 상속합니다. qobject는 다음과 같은 매우 강력한 기능을 제공합니다
- 개체 이름 : 문자열로 이름을 객체로 설정하고 이름으로 개체를 검색 할 수 있습니다.
- 육아 시스템 (다음 섹션에 설명)
- 신호 및 슬롯 (다음 장에서 설명)
- 이벤트 관리
위젯은 이벤트에 응답하고 육아 시스템 및 신호 및 슬롯 메커니즘을 사용할 수 있습니다. 모든 위젯은 Qobject에서 상속됩니다. 가장 기본적인 위젯은 QWIDGET입니다 . QWIDGET은 창을 설명하는 데 사용되는 대부분의 속성 또는 위치 및 크기, 마우스 커서, 툴팁 등과 같은 위젯을 포함합니다.
주목 : QT에서 위젯도 창일 수 있습니다. 이전 섹션에서는 위젯 인 버튼을 표시했지만 창으로 직접 나타납니다. “Qwindow”클래스가 필요하지 않습니다.
거의 모든 그래픽 요소는 Qwidget에서 상속됩니다. 예를 들어 다음과 같이 나열 할 수 있습니다
모든 버튼 유형에 대한 기본 클래스 QPUSHBUTTON QCHECKBOX QRADIOBUTTON QFRAME, 텍스트 나 그림을 표시하는 프레임 QLABEL을 표시하는 QABSTRANTBUTTON
이 상속은 속성 관리를 용이하게하기 위해 수행됩니다. 크기 및 커서와 같은 공유 속성은 다른 그래픽 구성 요소에서 사용할 수 있으며 QabstractButton은 모든 버튼에서 공유하는 기본 속성을 제공합니다.
육아 시스템
육아 시스템은 QT, 특히 위젯의 객체를 다루는 편리한 방법입니다. Qobject에서 상속하는 모든 물체는 부모와 자녀를 가질 수 있습니다. 이 계층 트리는 많은 것을 편리하게 만듭니다
- 물체가 파괴되면 모든 아이들도 파괴됩니다. 그래서 전화 삭제 어떤 경우에는 선택 사항이됩니다.
- 모든 qobjects가 있습니다 찾아 낸다 그리고 자녀를 찾으십시오 주어진 물체의 어린이를 검색하는 데 사용할 수있는 방법.
- qwidget의 자식 위젯이 부모 위젯 내부에 자동으로 나타납니다.
QPushButton 내부에 QPUSHBUTTON을 만드는 다음 스 니펫 :
#포함하다 #포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); QPUSHBUTTON 버튼 1 ("시험"); QPUSHBUTTON 버튼 2 ("다른", &이었다버튼 1); 버튼 1.보여주다(); 반품 앱.exec(); >
응용 프로그램이 닫히면, 버튼 1, 스택에 할당 된 것은 거래됩니다. Button2는 부모로서 button1을 가지고 있으므로 삭제됩니다. 메모리 누출을 검색하여 분석 섹션의 QT Creator에서 이것을 테스트 할 수도 있습니다.
버튼 안에 버튼을 넣을 때는 분명히 이점이 없지만이 아이디어를 바탕으로 컨테이너 안에 버튼을 넣을 수 있습니다. 이 컨테이너는 단순히 Qwidget입니다 .
다음 코드는 위젯 안에 버튼을 표시하는 데 사용됩니다
#포함하다 #포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); qwidget 창문; 창문.setfixedsize(100, 50); QPUSHBUTTON *단추 = 새로운 QPUSHBUTTON("안녕하세요 세계", &이었다창문); 단추->setGeometry(10, 10, 80, 30); 창문.보여주다(); 반품 앱.exec(); >
우리는 고정 된 크기 위젯 (창으로 작용)을 만듭니다 setfixedsize. 이 방법에는 다음과 같은 서명이 있습니다
무효의 qwidget::setfixedsize(int 너비, int 키);
우리는 또한 버튼을 사용하여 배치했습니다 setGeometry. 이 방법에는 다음과 같은 서명이 있습니다
무효의 qwidget::setGeometry(int 엑스, int 와이, int 너비, int 키);
서브 클래스 QWIDGET
지금까지 우리는 모든 코드를 기본 기능. 이것은 간단한 예제에는 문제가되지 않았지만 점점 더 복잡한 응용 프로그램의 경우 코드를 다른 클래스로 나누고 싶을 수도 있습니다. 종종 수행되는 것은 창을 표시하는 데 사용되는 클래스를 만들고이 창에 포함 된 모든 위젯을이 클래스의 속성으로 구현하는 것입니다.
QT Creator에서 파일> 새 파일 또는 프로젝트> C ++> C ++ 클래스로 새 클래스를 자동으로 생성 할 수 있습니다
클래스가 Qwidget에서 상속 받으면 아래와 유사한 코드를 얻어야합니다
#ifndef Window_H #Define Window_H #포함하다 수업 창문 : 공공의 qwidget q_object 공공의: 명백한 창문(qwidget *부모의 = 0); 신호: 공공의 슬롯: >; #endif // window_h
#포함하다 "창문.시간" 창문::창문(qwidget *부모의)) : qwidget(부모의)) <>
QT Creator가 클래스 템플릿을 자동으로 생성하는 것을 볼 수 있습니다. 헤더에는 몇 가지 새로운 요소가 있습니다
- 그만큼 q_object 매크로.
- 새로운 범주의 메소드 : 신호
- 새로운 범주의 메소드 : 공개 슬롯
이 모든 요소는 다음 장에서 설명 될 것이며 지금은 그 중 어느 것도 필요하지 않습니다. 창을 구현하는 것은 생성자에서 수행됩니다. 창의 크기 와이 창이 포함 된 위젯 및 해당 위치를 선언 할 수 있습니다. 예를 들어, 버튼이 포함 된 이전 창을 구현하면 다음과 같은 방식으로 수행 할 수 있습니다
#포함하다 #포함하다 "창문.시간" int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); 창문 창문; 창문.보여주다(); 반품 앱.exec(); >
#ifndef Window_H #Define Window_H #포함하다 수업 QPUSHBUTTON; 수업 창문 : 공공의 qwidget 공공의: 명백한 창문(qwidget *부모의 = 0); 사적인: QPUSHBUTTON *M_BUTTON; >; #endif // window_h
#포함하다 "창문.시간" #포함하다 창문::창문(qwidget *부모의)) : qwidget(부모의)) // 창 크기를 설정합니다 setfixedsize(100, 50); // 버튼을 만들고 배치합니다 M_BUTTON = 새로운 QPUSHBUTTON("안녕하세요 세계", 이것); M_BUTTON->setGeometry(10, 10, 80, 30); >
M_BUTTON을 삭제하기 위해 소멸자를 쓸 필요가 없습니다 . 육아 시스템을 사용하면 창 인스턴스가 스택을 벗어나면 M_BUTTON이 자동으로 삭제됩니다.
추가 독서
이 위키 페이지에서 QPushButton에 대한 더 나은 개요가 제공됩니다 QPUSHBUTTON 사용 방법
관찰자 패턴
거의 모든 UI 툴킷에는 사용자 작업을 감지 하고이 작업에 응답하는 메커니즘이 있습니다. 그들 중 일부는 사용합니다 콜백, 다른 사람들은 사용합니다 청취자, 그러나 기본적으로 그들 모두는 관찰자 패턴에서 영감을 받았습니다.
관찰자 패턴은 다음에 사용됩니다 주목할 만한 객체는 다른 사람에게 알리고 싶어합니다 관찰자 상태 변화에 대한 대상. 구체적인 예는 다음과 같습니다
- 사용자가 버튼을 클릭했으며 메뉴를 표시해야합니다.
- 웹 페이지가 방금로드를 마치고 프로세스는이로드 된 페이지에서 일부 정보를 추출해야합니다.
- 사용자가 항목 목록 (예 : 앱 스토어에서)을 스크롤하고 끝에 도달 했으므로 더 많은 항목을로드해야합니다.
관찰자 패턴은 GUI 응용 분야의 모든 곳에서 사용되며 종종 일부 보일러 플레이트 코드로 이어집니다. QT는이 보일러 플레이트 코드를 제거하고 멋진 깨끗한 구문을 제공한다는 아이디어로 만들어졌습니다. 신호 및 슬롯 메커니즘으로 인해이를 가능하게합니다.
신호 및 슬롯
QT는 관찰 가능한 물체와 관찰자를 갖고 등록하는 대신 두 가지 높은 수준의 개념을 제공합니다 신호 그리고 슬롯.
- ㅏ 신호 객체가 보낼 수있는 메시지이며, 일반적으로 상태 변경을보고합니다.
- ㅏ 슬롯 신호를 받아들이고 응답하는 함수입니다.
다음은 잘 알려진 Qpushbutton 클래스의 신호 및 슬롯의 예입니다.
보시다시피, 그들의 이름은 매우 명백합니다. 이 신호는 사용자가 클릭 (누르고 릴리스)을 클릭하거나 버튼을 누르거나 릴리스 할 때 전송됩니다.
다음은 다른 클래스의 일부 슬롯입니다.
- qapplication :: 종료
- qwidget :: setEnabled
- qpushbutton :: settext
신호에 응답하려면 슬롯이 연결 신호에. Qt는 qobject :: 메소드를 제공합니다연결하다. 두 개의 매크로와 함께 이런 식으로 사용됩니다 신호 그리고 슬롯 .
fooobjecta *fooa = 새로운 fooobjecta(); fooobjectb *foob = 새로운 fooobjectb(); qobject::연결하다(fooa, 신호 (예외()), foob, 슬롯 (바즈()));
이 예제는 fooobjecta에 신호가 가해지고 fooobjectb에는 baz 슬롯이 있다고 가정합니다.
신호의 서명과 두 마크로 안에 슬롯을 작성해야합니다 신호 그리고 슬롯. 이 매크로가하는 일에 대한 자세한 정보를 원한다면이 장의 마지막 섹션을 읽으십시오.
주목 : 기본적으로 신호와 슬롯은 논증이 있거나 없을 수도 있지만 아무것도 반환하지 않을 수도있는 방법입니다. 방법으로서 신호의 개념은 드문 일이지만 슬롯은 실제로 실제 방법이며 다른 방법으로 평소와 같이 호출하거나 신호에 응답 할 수 있습니다.
정보 전송
신호 및 슬롯 메커니즘은 버튼 클릭에 응답하는 데 유용하지만 그 이상을 수행 할 수 있습니다. 예를 들어 정보를 전달하는 데 사용될 수도 있습니다. 노래를 연주하는 동안 노래가 끝나기 전에 얼마나 많은 시간이 남아 있는지 보여주기 위해 진행 상황이 필요하다고 가정 해 봅시다. 미디어 플레이어는 미디어의 진행 상황을 확인하는 데 사용되는 클래스가있을 수 있습니다. 이 클래스의 인스턴스는 주기적으로 a를 보낼 수 있습니다 진드기 진행 값을 가진 신호. 이 신호는 진행 상황을 표시하는 데 사용할 수있는 QPROGRESSBAR에 연결할 수 있습니다.
진행 상황을 확인하는 데 사용되는 가상 클래스에는이 서명이있는 신호가있을 수 있습니다
무효의 MediaProgressManager::진드기(int 밀리 초);
그리고 우리는 문서에서 QPROGRESSBAR 에이 슬롯이 있음을 알고 있습니다
무효의 qprogressbar::setValue(int 값);
신호와 슬롯에 동일한 종류의 매개 변수, 특히 유형이 있음을 알 수 있습니다. 신호를 동일한 종류의 매개 변수를 공유하지 않는 슬롯에 연결하면 연결이 수행되면 (런타임에) 다음과 같은 경고가 표시됩니다
qobject::연결하다: 호환되지 않습니다 보내는 사람/수화기 논쟁
신호가 매개 변수를 사용하여 정보를 슬롯으로 전송하기 때문입니다. 신호의 첫 번째 매개 변수는 슬롯의 첫 번째 매개 변수로 전달되며 두 번째, 세 번째 등에 동일합니다.
연결 코드는 다음과 같습니다
MediaProgressManager *관리자 = 새로운 MediaProgressManager(); qprogressbar *진전 = 새로운 qprogressbar(창문); qobject::연결하다(관리자, 신호 (진드기(int))), 진전, 슬롯 (setValue(int)));
내부에 서명을 제공해야한다는 것을 알 수 있습니다 신호 그리고 슬롯 매크로, 신호를 통과하는 값의 유형을 제공. 원하는 경우 변수 이름을 제공 할 수도 있습니다. (실제로는 더 좋습니다).
신호 및 슬롯의 특징
- 신호는 여러 슬롯에 연결할 수 있습니다
- 많은 신호가 슬롯에 연결될 수 있습니다
- 신호는 신호에 연결될 수 있습니다. 신호 전달입니다. 첫 번째 신호가 전송되면 두 번째 신호가 전송됩니다.
예
이벤트에 응답합니다
우리의 버튼 앱을 기억하십시오? 버튼을 클릭하여 닫을 수있는 것처럼 실제로이 앱으로 무언가를 만들어 봅시다. 우리는 이미 Qpushbutton이 제공한다는 것을 알고 있습니다 클릭 신호. 또한 Qapplication이 제공한다는 것을 알아야합니다 그만두다 슬롯, 응용 프로그램이 닫힙니다.
버튼을 클릭하려면 앱을 닫으려면 신호를 연결해야합니다 클릭 버튼으로 방출됩니다 그만두다 이 qapplication 인스턴스의 슬롯. 이전 섹션에서 코드를 수정하여이를 수행하기 전에 다른 클래스에있는 동안 Qapplication 인스턴스에 액세스하는 방법이 궁금 할 것입니다. 실제로 Qapplication에 정적 함수가 있기 때문에 다음과 같은 서명을 얻는 데 사용되기 때문에 매우 간단합니다
qapplication * qapplication::사례()
이것은 이전 코드의 다음 수정으로 이어집니다
#포함하다 "창문.시간" #포함하다 #포함하다 창문::창문(qwidget *부모의)) : qwidget(부모의)) // 창 크기를 설정합니다 setfixedsize(100, 50); // 버튼을 만들고 배치합니다 M_BUTTON = 새로운 QPUSHBUTTON("안녕하세요 세계", 이것); M_BUTTON->setGeometry(10, 10, 80, 30); // 새로운 : 연결합니다 연결하다(M_BUTTON, 신호 (클릭()), qapplication::사례(), 슬롯 (그만두다())); >
창 내부 버튼이 클릭되면 응용 프로그램이 종료됩니다.
신호 및 슬롯으로 정보를 전송합니다
다음은 정보 전송을위한 간단한 예입니다. 창 안에 진행률 표시 줄과 슬라이더 (QSLIDR에 의해 생성) 만 표시되며 슬라이더가 이동하는 동안 진행률 표시 줄의 값은 매우 간단한 연결과 동기화됩니다.
흥미로운 신호와 슬롯은 다음과 같습니다
무효의 QSLIDER::valuechanged(int 값); 무효의 qprogressbar::setValue(int 값);
QSLIDRE는 값이 변경 될 때 매개 변수로 전달 된 새 값으로 평가 된 신호를 자동으로 제출하고 QPROGRESSBAR의 메소드 세트 밸브가 진행되는 것처럼 진행률 표시 줄의 값을 설정하는 데 사용됩니다.
이것은 다음 코드로 이어집니다
#포함하다 #포함하다 #포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); // 컨테이너 창을 만듭니다 qwidget 창문; 창문.setfixedsize(200, 80); // 진행률 표시 줄을 만듭니다 // 0과 100 사이의 범위와 시작 값 0 qprogressbar *진행 표시 줄 = 새로운 qprogressbar(&이었다창문); 진행 표시 줄->세트 레인지(0, 100); 진행 표시 줄->setValue(0); 진행 표시 줄->setGeometry(10, 10, 180, 30); // 수평 슬라이더를 만듭니다 // 0과 100 사이의 범위와 시작 값 0 QSLIDER *슬라이더 = 새로운 QSLIDER(&이었다창문); 슬라이더->setorientation(QT::수평의); 슬라이더->세트 레인지(0, 100); 슬라이더->setValue(0); 슬라이더->setGeometry(10, 40, 180, 30); 창문.보여주다(); // 연결 //이 연결은 진행률 표시 줄의 값을 설정합니다 // 슬라이더 값이 변경되는 동안 qobject::연결하다(슬라이더, 신호 (valuechanged(int))), 진행 표시 줄, 슬롯 (setValue(int))); 반품 앱.exec(); >
기술적 인 측면
이 섹션은 QT로 만 프로그램하려면 지금까지 건너 뛸 수 있습니다. 당신이 넣어야한다는 것을 알고 있습니다 신호 그리고 슬롯 Connect를 호출하는 동안 신호와 슬롯 주위 . QT가 어떻게 작동하는지 알고 싶다면 이것을 읽는 것이 좋습니다.
메타 객체
QT는 a 메타 객체 체계. Meta-Object (문자 그대로 “Over the Object”)는 순수한 C ++처럼 일반적으로 달성하기가 불가능한 일부 프로그래밍 패러다임을 달성하는 방법입니다
- 내성 : 런타임에 유형을 검사하는 기능
- 비동기 기능 호출
애플리케이션에서 이러한 메타 객체 기능을 사용하려면 Qobject를 서브 클래스하고 Meta-Object 컴파일러 (MOC)가 해석하고 번역 할 수 있도록 표시 할 수 있습니다.
MOC에 의해 생성 된 코드에는 신호 및 슬롯 서명, 표시된 클래스에서 메타 정보를 검색하는 데 사용되는 방법, 속성 처리. 이 모든 정보는 다음 방법을 사용하여 액세스 할 수 있습니다
Const qmetaobject * qobject::메타 오브 ject () Const
qmetaobject 클래스에는 메타 객체를 다루는 모든 방법이 포함되어 있습니다.
중요한 매크로
가장 중요한 매크로는입니다 q_object. Signal-Slot Connections 및 해당 구문은 일반 C ++ 컴파일러로 해석 할 수 없습니다. MOC는 “Connect”, “신호”, “슬롯”등과 같은 QT 구문을 일반 C ++ 구문으로 변환하도록 제공됩니다. 이것은 지정하여 수행됩니다 q_object 그러한 구문을 사용하는 클래스 정의가 포함 된 헤더의 매크로.
수업 mywidget : 공공의 qwidget q_object 공공의: mywidget(qwidget *부모의 = 0); >
MOC를위한 다른 마커 마커 매크로
- 신호
- 공개 / 보호 / 개인 슬롯
확장 해야하는 다른 방법을 표시합니다.
신호 그리고 슬롯 또한 매우 중요하고 유용한 매크로입니다. 신호가 방출되면 메타 객체 시스템은 신호의 서명을 비교하고 연결을 확인하고 서명을 사용하여 슬롯을 찾는 데 사용됩니다. 이 매크로는 실제로 제공된 메소드 서명을 메타 객체에 저장된 문자열로 변환하는 데 사용됩니다.
사용자 정의 신호 및 슬롯 생성
이 장.
맞춤형 슬롯과 신호를 만드는 것은 정말 간단합니다. 슬롯은 일반적인 방법과 같지만 주변에 작은 장식이 있지만 신호는 구현이 거의 없거나 전혀 필요하지 않습니다.
사용자 정의 신호와 슬롯을 만드는 것은 매우 간단합니다. 다음 점검 목록으로 설명합니다
- 추가하다 q_object 매크로
- 추가하다 신호 섹션 및 신호 작성 프로토 타입
- 추가하다 공개 슬롯 또는 보호 된 슬롯 또는 개인 슬롯 섹션 및 작성 슬롯 프로토 타입
- 슬롯을 일반 방법으로 구현합니다
- 연결을 설정하십시오
맞춤형 슬롯 생성
슬롯을 구현하려면 먼저 클래스가 신호를 보내고 슬롯을 갖도록해야합니다 (이전 장 참조). 이것은 설정하여 수행됩니다 q_object 클래스 선언의 매크로 (종종 헤더에서).
그런 다음 해당 섹션에서 슬롯을 선언하고 일반 방법으로 구현해야합니다.
마지막으로 슬롯은 신호에 연결됩니다.
신호 생성
슬롯은 먼저 추가해야합니다 q_object 매크로.
신호도 선언해야합니다 신호 섹션, 구현 될 필요가 없습니다.
그들은 그것을 사용하여 방출됩니다 방출 예어:
방출 mysignal();
매개 변수가있는 신호를 보내려면 신호 방출에이를 전달해야합니다
방출 mysignal(FirstParameter, 2 차 파라미터 …);
예
맞춤형 슬롯 생성
버튼으로 창문부터 시작하겠습니다
#ifndef Window_H #Define Window_H #포함하다 수업 QPUSHBUTTON; 수업 창문 : 공공의 qwidget 공공의: 명백한 창문(qwidget *부모의 = 0); 사적인: QPUSHBUTTON *M_BUTTON; >; #endif // window_h
#포함하다 "창문.시간" #포함하다 창문::창문(qwidget *부모의)) : qwidget(부모의)) // 창 크기를 설정합니다 setfixedsize(100, 50); // 버튼을 만들고 배치합니다 M_BUTTON = 새로운 QPUSHBUTTON("안녕하세요 세계", 이것); M_BUTTON->setGeometry(10, 10, 80, 30); >
버튼을 클릭하면서 응용 프로그램을 종료하는 이전 연결을 제거 할 수 있습니다. 이제 버튼을 클릭하면 텍스트가 변경됩니다. 더 정확하게는 버튼이 확인, 그리고 확인하면 “확인”을 표시하고 확인되지 않은 경우 “Hello World”가 복원됩니다.
QPushButton은 그러한 특정 슬롯을 구현하지 않으므로 우리는 자체적으로 구현해야합니다. 앞에서 언급했듯이, 우리는 추가해야합니다 q_object 매크로.
수업 창문 : 공공의 qwidget q_object 공공의: 명백한 창문(qwidget *부모의 = 0); 사적인: QPUSHBUTTON *M_BUTTON; >;
우리는 또한 사용자 정의 슬롯을 추가합니다. 체크인 버튼에서 반응하려고하고 해당 신호가
무효의 QPUSHBUTTON::클릭(부 확인))
이 서명이있는 슬롯을 구현할 수 있습니다
무효의 창문::SlotButtonClicked(부 확인);
대부분의 경우, 컨벤션별로, 우리는 “슬롯”으로 접두사를 통해 개인 및 보호 된 슬롯을 구현합니다. 여기서 우리는이 슬롯을 공개 기능으로 노출시키는 데 관심이 없습니다. 그러면 새 헤더가 있습니다
#ifndef Window_H #Define Window_H #포함하다 수업 QPUSHBUTTON; 수업 창문 : 공공의 qwidget q_object 공공의: 명백한 창문(qwidget *부모의 = 0); 사적인 슬롯: 무효의 SlotButtonClicked(부 확인); 사적인: QPUSHBUTTON *M_BUTTON; >; #endif // window_h
이 슬롯의 구현은입니다
무효의 창문::SlotButtonClicked(부 확인)) 만약에 (확인)) M_BUTTON->setText("확인"); > 또 다른 M_BUTTON->setText("안녕하세요 세계"); > >
버튼을 확인하고 연결을 설정해야합니다.이 코드를 생성자에 추가해야합니다
M_BUTTON->setCheckable(진실); 연결하다(M_BUTTON, 신호 (클릭(부))), 이것, 슬롯 (SlotButtonClicked(부)));
결과 코드는 다음과 같습니다
#포함하다 "창문.시간" #포함하다 창문::창문(qwidget *부모의)) : qwidget(부모의)) // 창 크기를 설정합니다 setfixedsize(100, 50); // 버튼을 만들고 배치합니다 M_BUTTON = 새로운 QPUSHBUTTON("안녕하세요 세계", 이것); M_BUTTON->setGeometry(10, 10, 80, 30); M_BUTTON->setCheckable(진실); 연결하다(M_BUTTON, 신호 (클릭(부))), 이것, 슬롯 (SlotButtonClicked(부))); > 무효의 창문::SlotButtonClicked(부 확인)) 만약에 (확인)) M_BUTTON->setText("확인"); > 또 다른 M_BUTTON->setText("안녕하세요 세계"); > >
사용자 정의 신호 방출
이전 예제를 기준으로 버튼을 클릭하면 (확인 또는 확인되지 않은) 10 번 응용 프로그램을 닫으려고합니다. 먼저 클릭 수를 계산하는 카운터를 구현해야합니다. 이러한 수정은이를 구현합니다
수업 창문 : 공공의 qwidget q_object 공공의: 명백한 창문(qwidget *부모의 = 0); 사적인 슬롯: 무효의 SlotButtonClicked(부 확인); 사적인: int m_counter; QPUSHBUTTON *M_BUTTON; >;
창문::창문(qwidget *부모의)) : qwidget(부모의)) // 창 크기를 설정합니다 setfixedsize(100, 50); // 버튼을 만들고 배치합니다 M_BUTTON = 새로운 QPUSHBUTTON("안녕하세요 세계", 이것); M_BUTTON->setGeometry(10, 10, 80, 30); M_BUTTON->setCheckable(진실); m_counter = 0; 연결하다(M_BUTTON, 신호 (클릭(부))), 이것, 슬롯 (SlotButtonClicked(부))); > 무효의 창문::SlotButtonClicked(부 확인)) 만약에 (확인)) M_BUTTON->setText("확인"); > 또 다른 M_BUTTON->setText("안녕하세요 세계"); > m_counter ++; >
이제 다른 구성 요소를 알리는 데 사용되는 사용자 정의 신호를 작성해야합니다. 카운터가 10에 도달했습니다. 신호를 선언하려면
신호
헤더의 섹션. 또한 다음 서명이있는 신호를 선언 할 수도 있습니다
무효의 창문::반환()
그런 다음 헤더 클래스가 다음과 같이 선언됩니다
수업 창문 : 공공의 qwidget q_object 공공의: 명백한 창문(qwidget *부모의 = 0); 신호: 무효의 반환(); 사적인 슬롯: 무효의 SlotButtonClicked(부 확인); 사적인: int m_counter; QPUSHBUTTON *M_BUTTON; >;
신호가 메소드로 선언 되더라도 구현할 필요가 없습니다. 메타 객체 컴파일러가이를 수행하는 데 사용됩니다.
이제 카운터가 10에 도달하면 신호를 방출해야합니다. 슬롯에서 간단히 수행됩니다
무효의 창문::SlotButtonClicked(부 확인)) 만약에 (확인)) M_BUTTON->setText("확인"); > 또 다른 M_BUTTON->setText("안녕하세요 세계"); > m_counter ++; 만약에 (m_counter == 10)) 방출 반환(); > >
키워드를 작성해야합니다 방출 신호를 보내기 위해.
새로 생성 된 신호를 종금 슬롯에 연결하면 평소와 같이 수행됩니다
연결하다(이것, 신호 (반환()), qapplication::사례(), 슬롯 (그만두다()));
최종 코드는 다음과 같습니다
#ifndef Window_H #Define Window_H #포함하다 수업 QPUSHBUTTON; 수업 창문 : 공공의 qwidget q_object 공공의: 명백한 창문(qwidget *부모의 = 0); 신호: 무효의 반환(); 사적인 슬롯: 무효의 SlotButtonClicked(부 확인); 사적인: int m_counter; QPUSHBUTTON *M_BUTTON; >; #endif // window_h
#포함하다 "창문.시간" #포함하다 #포함하다 창문::창문(qwidget *부모의)) : qwidget(부모의)) // 창 크기를 설정합니다 setfixedsize(100, 50); // 버튼을 만들고 배치합니다 M_BUTTON = 새로운 QPUSHBUTTON("안녕하세요 세계", 이것); M_BUTTON->setGeometry(10, 10, 80, 30); M_BUTTON->setCheckable(진실); m_counter = 0; 연결하다(M_BUTTON, 신호 (클릭(부))), 이것, 슬롯 (SlotButtonClicked(부))); 연결하다(이것, 신호 (반환()), qapplication::사례(), 슬롯 (그만두다())); > 무효의 창문::SlotButtonClicked(부 확인)) 만약에 (확인)) M_BUTTON->setText("확인"); > 또 다른 M_BUTTON->setText("안녕하세요 세계"); > m_counter ++; 만약에 (m_counter == 10)) 방출 반환(); > >
버튼을 10 번 클릭 한 후에는 응용 프로그램이 종료되는지 확인하고 확인할 수 있습니다.
문제 해결
프로그램을 컴파일하는 동안, 특히 매크로 Q_Object를 추가 할 때이 컴파일 오류가 발생할 수 있습니다.
기본.CPP:(.텍스트._zn6windowd2ev[의 뜻_zn6windowd5ev]]+0x3)): 한정되지 않은 참조 에게 `vtable ~을 위한 창문'
메타 객체 컴파일러가 메타 객체가 있어야하는 클래스에서 실행되지 않기 때문입니다. 당신은해야합니다 Qmake 재실행, 빌드> 실행 qmake를 수행함으로써.
위젯
라디오 버튼은 표준 GUI 구성 요소입니다. 종종 목록에서 독특한 선택을하는 데 사용됩니다. QT에서 Qradiobutton은 라디오 버튼을 만드는 데 사용됩니다.
멋진 유산 덕분에 Qradiobutton은 Qpushbutton처럼 행동합니다. Qpushbutton의 모든 속성은 Qradiobutton에서도 동일하며 두 번째 장에서 배운 모든 것은 여기에서 재사용 할 수 있습니다.
기본적으로 Qradiobuttons는 그룹화되지 않으므로 많은 사람들이 동시에 확인할 수 있습니다. 많은 라디오 버튼의 “독점”동작을하려면 QBUTTONGROUP를 사용해야합니다 . 이 클래스는 다음과 같이 사용할 수 있습니다 : 우리는 새 버튼 그룹을 할당하여 부모 객체에 첨부합니다. 부모 객체는 메인 원형 또는 “this”일 수 있습니다
qbuttongroup *Buttongroup = 새로운 qbuttongroup(물체); // 버튼 그룹에 버튼을 추가합니다 Buttongroup->AddButton(버튼 1); Buttongroup->AddButton(버튼 2); Buttongroup->AddButton(버튼 3); .
우리가 원하는 것은 메뉴 선택기를 만드는 것입니다. 창에는 맛있는 플레이트 목록이 라디오 버튼으로 표시되어야하며 선택한 플레이트를 선택하는 데 사용되는 푸시 버튼을 표시해야합니다.
분명히 버튼을 클릭하면 아무 일도 일어나지 않을 것입니다.
신호 및 슬롯
다음은 신호 및 슬롯에 대한 예입니다. 우리는 두 개의 버튼으로 응용 프로그램을 작성할 것입니다. 첫 번째 버튼은 QT에 대한 정보를 표시해야합니다.
완료 할 다음 코드를 제공합니다
#포함하다 #포함하다 int 기본(int argc, 숯 **Argv)) qapplication 앱 (argc, Argv); qwidget 창문; 창문.setfixedsize(100, 80); QPUSHBUTTON *buttoninfo = 새로운 QPUSHBUTTON("정보", &이었다창문); buttoninfo->setGeometry(10, 10, 80, 30); QPUSHBUTTON *버튼 퀴트 = 새로운 QPUSHBUTTON("그만두다", &이었다창문); 버튼 퀴트->setGeometry(10, 40, 80, 30); 창문.보여주다(); // 여기에 코드를 추가하십시오 반품 앱.exec(); >
QT에 대한 정보를 표시하려면 다음 방법을 사용해야합니다
무효의 qapplication::약 Qt();
버튼에 아이콘을 추가하거나 크기를 조정할 수도 있습니다. 분명히 “종료”버튼이 더 중요해야하므로 더 크게 만들어주지 않겠습니까??
하지만 우리는이 운동을 해결하는 방법을 직접 알아 내려고 시도하는 것이 좋습니다.
초보자 용 QT – 문서에서 정보 찾기
QT 문서는 매우 귀중한 정보입니다. 찾을 수있는 곳입니다 모든 것 QT와 관련이 있습니다. 그러나 QT 문서는 QT 사용 방법에 대한 자습서가 아닙니다. 수업과 관련된 모든 정보와 몇 가지 예제입니다. 이 장의 목표는 QT와의 프로그래밍의 기초로 문서를 소개하는 것입니다.
문서를 찾을 수있는 곳
가장 좋은 문서 소스는이 개발자 네트워크에서 인터넷에 있습니다
사용자가 추가 할 수있는 전체 문서와 일부 사업체를 제공합니다. 이 닥터 노트는 더 많은 예를 제공하고 몇 가지 까다로운 점을 강조합니다. 온라인 문서에는 매우 강력한 검색 엔진이 있으며 모든 버전의 QT에 대한 모든 문서도 포함되어 있습니다.
온라인 버전에는 인터넷 연결이 필요하지만 Dopnotes는 여전히 사용할 수 있습니다. QTSDK가 올바르게 설치된 경우 현재 QT 버전과 일치하는 문서가 설치되어야합니다 돕다 QTCreator의 섹션은 비어 있지 않아야합니다. 당신은 또한 사용할 수 있습니다 QT 보조, 독립형 문서 브라우저입니다.
문서의 중요한 섹션
QT Creator 또는 QT Assistant에서 오프라인 문서 뷰어를 실행중인 경우 QT SDK의 다른 구성 요소에 대한 문서가 있다는 요약을 찾을 수 있습니다.
- QT 보조 문서
- QT 디자이너 문서
- QT 언어 학자 문서
- Qmake 문서화
- QT 참조 문서
물론 가장 중요한 구성 요소는 QT 참조 문서입니다.
QT 문서화는 많은 구성 요소와 QT의 모든 클래스에 대한 문서를 잘 소개합니다. 이 목록은 모든 클래스 페이지에 나열되어 있습니다. 또 다른 흥미로운 페이지는 모든 모듈을 나열하는 페이지입니다. 이 페이지는 QT의 다양한 구성 요소에 대한 정보를 제공합니다.
이 튜토리얼에서는 주로이 모듈을 사용합니다
검색 기능도 매우 중요합니다. 사용할 수있는 클래스를 알고 문서를 찾으려면 검색 필드 (온라인) 에이 클래스의 이름을 입력하거나 색인 (오프라인)의 필터에 입력 할 수 있습니다. 이 분야에서 방법과 열거를 검색 할 수도 있습니다.
수업의 문서를 찾아보십시오
수업 문서화는 항상 같은 방식으로 구성됩니다
- 수업의 이름과 간단한 설명
- 계승
- 열거
- 속성
- 공개 방법
- 공개 슬롯
- 신호
- 보호 된 방법
Qtextedit 클래스를 예로 들어 봅시다.
QT에는 C 인터페이스가 있습니까??
웹에서 상충되는 답변을 찾았습니다. 어떤 사람들은 그렇게 말합니다. 어떤 사람들은 그렇지 않다고 말합니다. 공식 QT 문서에서도 세부 정보를 찾을 수 없었습니다. QT는 C 바인딩이 있거나 그렇지 않습니다?
2009 년 11 월 13 일 10:53에 물었다
6,041 11 11 금 배지 48 48은 배지 50 50 청동 배지
7 답변 7
짧은 대답 : 아니요.
C에 대한 포괄적 인 GUI 툴킷이 필요한 경우 GTK를 사용할 수 있습니다+.
QT를 사용하려면, 당신 ~ 해야 하다 C ++ 컴파일러가 있습니다. 그러나 “애플리케이션 논리”가 C로 작성 될 수없고 C 컴파일러로 컴파일되고 C ++ 부품 (QT가있는 GUI)에 신중하게 연결되어 있음을 의미하지는 않습니다. 이 응용 프로그램 논리는 일반일 수 있으며 다른 실행 파일 (Pure-C, Mixed C/C ++ 등에 연결할 수 있습니다.) 모두 필요한 것에 달려 있습니다.
QT는 C ++에 적합하며 특정 프로젝트에 C ++ 사용을 결정하는 것이 좋은 이유입니다.