노키아 Qt는 버전 4.5과 Qt는 창조주 1.0 - Qt는 확장 프로 가방됩니다

2009년 3월 6일 ·에 게시된 Qt는 · 보기 댓글

뉴스는 나이가 있지만 여전히 덥습니다. 마지막 날 화요일 3 월 3 일에, 노키아, Qt는 오랜 기다려온 버전 4.5을 ​​발표 Qt는 확장에서 명령을 내렸습니다 또한 Qt는 창조주의 첫 번째 릴리스를 발표했다.

자세히보기

설치 및 이클립스, 중부 서머 타임, Qt는, 서브 버전, 펄, 웹 도구 정력에만 마우스를 통합

2009년 2월 21일 ·에 게시된 C / C + + , , Eee , , Qt는 , 서브 , VIM , · 보기 댓글

옛날에 게시물 멀지 않은 이곳에서, 우리는 Qt는 개발과 Subversion을 함께 통합을위한 플러그인으로 일식을 설치하는 방법을 보여줍니다. 그러나 시간이 흐르고, 버전 변화와 모든 다른이며,이 시간 우리는 클릭과 Eee PC를 함께이 전용 ​​작업을 수행하는 방법을 보여줍니다.

자세히보기

이클립스 + Qt는 + svn

2008년 5월 9일 ·에 게시된 C / C + + , Qt는 , 서브 · 보기 댓글

더많은 튜토리얼보다는 개인적인 로그처럼, 나는 쉽게 접근할 위치를 떠날 필요가, 나는 일반적으로 사용하는 내 자신의 사용을위한 일식의 구성 단계, 또는 이클립스의 설치와 플러그인을 (svn와 Qt는) 느낌 .

집 밖 디렉토리에 영향을 미치는 명령은 슈퍼유저 권한이 필요합니다.

당신의 배포판에서 사용할 수있는 패키지를 시작 일식을 설치하려는 경우, 당신은 # 2 단계로 바로 건너뛸 수 있습니다.

# 0 단계 : 설치 자바

이클립스 작업의 경우 자바 런타임 환경 (JRE)가 설치되어 * E * 구성. 필요

JRE는 Sun의 사이트에서 직접 다운로드받을 수 있습니다 http://java.sun.com/javase/downloads/index.jsp . 설치 및 구성에 대한 전체 지침에서 찾을 수 있습니다 http://java.sun.com/javase/6/webnotes/install/index.html 자바 6의 경우를 위해.

# 1 단계 : Donwload 및 설치 이클립스를

: 일식 쉽게 자사의 공식 웹사이트에서 다운로드 영역에서 다운로드할 수 있습니다 http://www.eclipse.org/downloads . 다운로드 후, 그냥 압축을 풀고 사용하여 종료합니다. 내 경우에는 내가 사용 :

  -xvzf eclipse-cpp-europa-winter-linux-gtk.tar.gz -C / usr / local 사용자 @ 호스트 $ 타르-xvzf 일식-CPP-유로파 - 겨울 리눅스 gtk.tar.gz-C는 / usr / 지방 

모든 실행 가능한 일식은는 / usr / 지방 / 일식 / 일식에있을 것이다 일했다면, 그냥 좋아하는 그래픽 환경에서 링크 / 바로가기 / 무엇이든을 만듭니다.

# 2 단계 : QT와 플러그인 통합을 다운로드 및 설치


Qt는 이클립스 통합
Qt는 이클립스 구성

제가 현재 사용하는 플러그인 Trolltech 자체에 의해 제공됩니다. 여기 작은 그래픽 편집기에서 프로젝트 파일을 관리하고, 원하는 경우에도 해당 파일에 직접 액세스할 수 있습니다. 프로하실있습니다.

는에서 다운로드받을 수 http://trolltech.com/developer/downloads/qt/eclipse-integration-download 과에서 볼 수 있습니다 전체 설치 지침 http://trolltech.com/developer/downloads/qt / qteclipse-installmanual , 극도로 복잡하고 있습니다 :

  -xvzf qt-eclipse-integration-linux.x86-gcc3.3-1.4.0.tar.gz -C / usr / local 사용자 @ 호스트 $ 타르-xvzf Qt는 - 일식 - 통합 - linux.x86-gcc3.3-1.4.0.tar.gz-C는 / usr / 지방 

모든것이 제대로 됬다면, 플러그인 파일이 디렉토리는 / usr / 지방 / 일식 / 플러그인에 복사됩니다.

참고 : 배포 패키지를 통해 일식의 설치,주의를 거부하는 ​​분들을 위해! 압축 파일 안에 디렉토리 일식 / 플러그인 / 치과 그를 플러그인하여 이클립스 설치의 플러그인 디렉토리에 복사해야합니다 파일, 대개는 / usr / LIB / 일식 / 플러그인.입니다

설치 후 다음 명령으로 일식을 시작합니다 :

  usr / local / eclipse / eclipse -clean 사용자 @ 호스트 $는 / usr / 지방 / 일식 / 일식 - 클린 

이제 윈도우로 이동> 환경 설정>와 Qt는 귀하의 설치에 따라, Qt는 버전과 "pathes"를 설정

당신은 커맨드 라인에서 직접 일식을 호출하는 경우보다 편리하기 위해서 (. Bash_profile) 시작 스크립트의 어떤 내에 $ PATH 환경 변수에서 실행 파일의 디렉토리를 추가

  = $PATH : / usr / local / eclipse 수출 경로 (PATH) = $ PATH : 이제 / usr / 지방 / 일식 

# 3 단계 : 서브

일식에서> 소프트웨어 업데이트 도움을> 찾기 및 설치를 이동하십시오. 설치할 새 기능에 대한 옵션은 검색을 마르크와 다음을 클릭합니다. 이제 원격 사이트를 추가하려면 :

Buckminster

http://download.eclipse.org/tool​​s/buckminster/updates

Subclipse

http://subclipse.tigris.org/update_1.2.x

해당 확인란을 선택하고 마침을 누릅니다. 인터넷에 간단한 상담 후 바로 플러그인과 종속성을 확인하고 포옹하는 실행합니다.

QT, 파트 III에서 시작 - qmake 및 프로.

2008년 5월 7일 ·에 게시된 C / C + + , Qt는 · 보기 댓글

이 세 번째 포스트에서 우리는 QT 유틸리티 qmake 프로젝트 파일과 *에 대해 이야기합니다. 프로. 우리는 그것이 qmake에 대해 무엇인지 이해하고 프로젝트의 다양한 유형을 구성하는 방법을 보자.

qmake

qmake는 QT 프레임 워크와 함께 제공하는 유틸리티입니다. 그것의 기능의 규칙을 이미 프로젝트 파일 (*. 프로) 구문 분석과 Makefile을를 생성하는 방법입니다 moc , UIC 와 QT 임베디드 옵션을 제공합니다. 그것이 없다면, 예를 들어, 명시적으로 파일을 생성하고 moc_ * 명시적으로 우리의 프로젝트에 올바른 QT를 포함하도록 컴파일러와 링커 옵션에 전달 moc를 호출해야합니다.

qmake 및 프로젝트 파일에 대한 공식 문서를 찾을 수있는 이곳 .

* 프로젝트 파일. 프로

명령줄에서 간단한 프로젝트를 만들려면 프로젝트 디렉터리와 타이핑을 입력하십시오 :

  사용자 @ 호스트 $ qmake-프로젝트 

다 즉, 너희들이 확장자 다음, 현재 디렉토리와 동일한 이름을 가진 파일을 생성합니다. 프로. qmake에 의해 인식이 디렉토리에있는 파일이 이미있다면, 소스 코드 파일 (. H. CPP), 양식 (. UI) 등으로, 그들은 자동으로 프로젝트 파일에 추가됩니다.

파일을 만들었습니다. 프로, 그것이 파일을 구문 분석하려고합니다. 현재 디렉토리와 같은 이름을 가진 프로 인수없이 qmake를 실행합니다. 당신은 심지어 qmake에 대한 인수로 다른 프로젝트 파일을 지정할 수 있습니다. 모든 일했다면, Makefile을 만들어되었고, 간단한 제조 업체로, 우리는 프로젝트를 빌드할 수 있습니다.

프로젝트 파일은 Makefile을을 만드는 qmake에 의해 해석됩니다 매크로 및 지시문을 포함하는 일반 텍스트 파일입니다. 옵션의 전체 목록은 문서에서 찾을 수 온라인 . 가장 흔한은 다음과 같습니다

템플릿 : 프로젝트의 유형을 나타냅니다. proramas 실행을위한 '응용 프로그램'또는 '해방'라이브러리를 만들려면 사용합니다.

CONFIG : 프로젝트에 몇 가지 옵션을 추가합니다. 그중 '디버그'디버깅 정보가 abiblioteca 정전기를 (리눅스 인치 IT) 만들어진 템플릿 '해방'과 함께 'staticlib'를 추가할 수 있습니다.

대상 : 대상, 즉 응용 프로그램이나 라이브러리의 이름과 위치입니다.

MOC_DIR : 파일 grads 될 디렉토리 moc_ *. 소스 코드 디렉토리를 오염되지 데 유용합니다.

OBJECTS_DIR : 이전 옵션으로 보완이 위에 파일 (. * O) 오브젝트 코드를 생성 디렉토리를 나타냅니다.

IncludePath : 헤더와 같은 외부 라이브러리의 헤더로 프로젝트에 사용할 수있는 외부 디렉토리입니다.

DEPENDPATH : 프로젝트에 사용됩니다 외부 소스 코드 디렉토리.

헤더 : 프로젝트의 헤더 파일 (* H.).

양식 : QTDesigner (. * UI)로 생성된 인터페이스 파일.

소스 : 프로젝트 (. * CPP)의 소스 코드 구현의 파일.

라이브러리 : 프로젝트에서 사용하는 외부 라이브러리. -L은 라이브러리에 대한 경로를 나타냅니다, 전자 - 내가 라이브러리 이름은 말합니다.

QT : QT 모듈 추가 / 프로젝트에서 삭제합니다. 만약 과거에 'QT ='(빈 QT와 동일), QT는 프로젝트에서 사용되는 어떠한 모듈이 없습니다.

SUBDIRS : 템플릿 'subdirs'와 함께 사용이 하위 디렉토리의 기능에 qmake는 다른 프로젝트 파일을 찾아봐야 할것 나타냅니다.

이번의 손으로 우리는 간단한 디자인 몇 가지를 만들 수 있습니다.

간단한 응용 프로그램 :

  # 첫 번째 라인이 주석 문자를 생성
 #이 파일의 이름은 'app.pro'입니다
 저희 # 템플릿 = 애플 리케이션 템플릿이라는 응용 프로그램입니다
 TARGET = 빈 / # myapp.bin 디렉토리 내의 myapp.bin. / 빈
 선택적 MOCs위한 MOC_DIR = tmp를 / moc # 디렉토리,
 OBJECTS_DIR은 = tmp를 / OBJ # 옵션, 오브젝트 코드 디렉터리
 헤더 + = MyClass.h # 헤더 클래스 MyClass
 소식통은 + = main.cpp # 파일에 정리하기 위해 사용
                 myclass.cpp # 여러 줄을. 

간단한 라이브러리 :

  #이 파일의 이름은 'lib.pro'입니다
 저희 # 템플릿 = LIB 템플릿 라이브러리입니다
 CONFIG + = DLL # 동적 호출
 TARGET = LIB / mylib # mylib 디렉토리 내에서. / LIB
 선택적 MOCs위한 MOC_DIR = tmp를 / moc # 디렉토리,
 OBJECTS_DIR은 = tmp를 / OBJ # 옵션, 오브젝트 코드 디렉터리
 헤더 + = MyClass.h # 헤더 클래스 MyClass
 소스 + 클래스 MyClass의 = myclass.cpp # 구현 

: 외부 라이브러리를 사용하는 응용 프로그램

 #이 파일의 이름은 'mixed.pro'# 템플릿입니다 = 응용 프로그램은 우리의 템플릿 TARGET = 빈 / # 디렉토리 내에 myapp.lkd myapp.lkd. / 빈 MOC_DIR MOCs 용 = tmp를 / moc # 디렉토리, 옵션이라는 응용 프로그램입니다 OBJECTS_DIR = tmp를 / OBJ # 오브젝트 코드 디렉토리, 옵션 IncludePath + =.  # 디렉토리 위치를 외부 LIB 소스의 헤더입니다 + = 응용 프로그램 main.cpp # 구현. 

중첩된 디렉토리 :

중첩된 디렉토리를 활용하기 위해 우리는 현재 디렉토리에서 프로젝트 파일 및 다른 서브 디렉토리가 필요합니다.

현재 디렉토리에 옵션을 사용 :

  템플릿 = subdirs
 SUBDIRS = [순서에 건설해야하는 하위 디렉터리 목록] 

전용 디렉터리 이름을 부여하면, 자신의 이름을 가진 프로젝트 파일을 포함해야합니다. 그것 entando에서 서브 디렉토리의 목록에 직접 신고가 가능한가요, 한 디렉토리 퀘이커 이름으로 프로젝트 파일이 나타납니다.

이 튜토리얼에서 설명한 예제의 전체 소스 코드를 찾을 수있는 이곳 .

결론적으로

qmake는 프로젝트는 QT를 (단지 '= QT'의 끝에 추가) 사용하지 않는 경우에도 크게 복잡한 프로젝트의 나무를 관리할 수있는 하나의 생명을 용이 간단하고 매우 강력한 도구입니다. 프로젝트 파일이 구문은 매우 단순하고 약간은 직관해야한다는 사실을 추가합니다. 당신은 미세한 조정이 필요한 경우 설명서를 온라인으로 당신에게 재미 다스 옵션을 제공합니다.

함께 또는 QT QT qmake없이 항상 나무 건설의 관리를위한 좋은 방법입니다.

QT, 파트 II에서 시작 - 신호 슬롯 및 타이머

2008년 2월 1일 ·에 게시된 C / C + + , Qt는 · 보기 댓글

이 게시물에서 나는 QT에서 초보자를위한 작은 개인 교습을 할 수있는 게임을 따라갔다. 이번엔 내가 직접 신호와 슬롯을 만드는 방법과 타이머를 처리하는 방법을 보여줍니다.

소스 코드는이에서 찾을 수 있습니다 링크 .

예제 프로그램은 클래스 사용 타이머입니다 QTimer , QT의 기본 클래스 중 하나를, 그리고 클래스와 스타일의 LCD 디스플레이 계산기를 사용하여 시간이 표시됩니다 QLCDNumber를 .

QT와 타이머

QT의 가장 기본적인 지원 타이머 메소드를 제공 QObject 클래스에서 사용할 수 있습니다 startTimer :: QObject ()QObject :: KillTimer ()를 . 첫 번째 방법은 고유 ID를 반환하고 두 번째 타이머는이 ID를 통해 타이머를 종료됩니다.

이것이 작동하려면, 그러나이 메커니즘을 사용하여 코드 스니펫 (snippet)은 "이벤트 루프"안에 있어야합니다. 순간부터 타이머가 수시로 그것을 시작한 것은 (시간 초과) 응용 dispate하게 QTimerEvent 이벤트가 처리될 때까지 프로그램의 정상적인 흐름을 방해.

최대 제한 시간이 정의되지 않은, 그리고 년의 시간 초과와 타이머를 만들 수 있지만, 최소한의 시간은 시스템에서 시스템에 따라 다를 수 있습니다. 리눅스 2.6.x에서이은 (기본값은 4 MS입니다) 구성하는 동안 Windows Vista의 최소 타이머는 10 MS입니다. 요청 Qt는 모든 이벤트를 전달하기 위해 노력하지만, 시스템이 허용되지 않는 경우는 "흑자"를 무시합니다.

타이머는 스레드에서도 사용할 수 있지만 이벤트 루프 내부되는 요구 사항을 충족해야합니다. 스레드는 항상 별도의 기사를받을 자격이 ...

클래스 QTimer의 타이머 일부 기능을 수 있도록 높은 수준을 구현합니다. 하나는 QTimer :: singleShot () , 한 번 이벤트를 발생시킵니다.

광범위한 설명서 및 보링, 반복 읽기,하지만 절 믿으세요, 당신은 QDorDeCabeca을 많이 절약할 수 ...

신호와 슬롯에 대한 자세한

신호와 슬롯은 객체, QT의 기본적인 부분 중 하나 간의 통신을 위해 사용됩니다. 이벤트를 처리하는 콜백을 구현보다는이 시스템에서, 우리는 프로그래밍을 더 직관적으로 만들어 슬롯에 신호를 연결의 개념을 사용합니다.

신호와 슬롯으로 처리하는 클래스 메소드입니다 메타 객체 컴파일러 (moc) 소스 코드가 컴파일되기 전에. 그들의 일부가 아닌 특수 구문을 표준 C + +, 그래서 fazum moc는 소스 코드를 파싱하고 compilable 생성합니다.

당신은 신호와 슬롯, 소스 코드의 일정 금액이 생성을 구현하는 모든 클래스에 moc를 실행하면. 프로그램 사용 qmake를 moc은 프로그램에, 호출하는 것은 프로그래머에게 투명하게, Makefile을 부담합니다.

수업 신호와 슬롯을 구현할 수 들면, 그것은에 대한 액세스가 필요 메타 객체 시스템 . 그래서이 클래스에서 상속해야 QObject 와 그 하위 클래스, 그리고 매크로가 필요 Q_OBJECT 지역 개인 정보 보호 정책에 있습니다. "[| 보호 | 개인 공개] 슬롯"준비 완료 신호 섹션과 슬롯에있는 섹션의 "신호"에서 선언됩니다.

선언 이후에 슬롯이, 그때 다른 일반적인 방법으로 정의되며, 명시적으로 다른처럼 호출할 수 있습니다. 이미 징후가 좀 더 섬세한이며, 오직 프로그래머가 정의하고 선언합니다. 이유? 구축을 시도 끝에이 메시지 :

 tmp를 / moc_mydisplay.o : 함수는`MyDisplay에서 :: signalPlay () ':
 ~ / 스톱워치 / tmp를 / moc_mydisplay.cpp : 89 :`:: MyDisplay의 signalPlay ()의 여러 정의 '
 tmp를 / mydisplay.o : ~ / 스톱워치 / mydisplay.cpp : 169 : 여기 처음 정의
 collect2 : 신분증 1 종료 상태를 반환
 만들기 : ** [스톱워치] 오류 1

파일 moc_mydisplay.cpp 이내에 다음 코드를 생성한다 :

  / / 신호 0
 signalPlay ( ) 공극 MyDisplay :: signalPlay ()
 {
     activate ( this , & staticMetaObject , 0 , 0 ) ; QMetaObject :: 활성화 (이, & staticMetaObject, 0, 0);
 } 

예, moc은 Qt의 소위 메타 메소드의 정의와 신호를 생성합니다. 따라서 기호의 본문을 정의하는 것은 중부 표준시의 불법 및 재설정 방법에 대한 컴파일 오류를 생성합니다. moc 당신에게 신호의 구현을 담당 하죠.

연결

그것은 그저 설정된 신호와 슬롯을 사용할 수 없어요. 당신은 그들이 상호 작용 방식을 정의해야합니다. 이 작업을 수행하는 방법이 후계자에 걸쳐) (연결 방식을 통해 연결하는 것입니다 QObject . 이것은 moc는 신호를 구현할 수 있도록 동일한 매개 변수 (들) 슬롯 (들) 연결된 (들)에 대한 호출의 결과로 그것에 대한 안내입니다.하기

마지막 슬롯에 다시 전화로 연결에 따라 신호도 같은 값을 반환할 수 있습니다. 이것이 여러 슬롯에 연결된 신호를 따라서 아무것도 호출 순서를 보장하지 매우 안전하지 않습니다.

주어진 신호가 바로 두 번째 신호에 연결될 수 있습니다. 는 첫 신호, MOCs의 생성 단계 이후부터 다음 연결된 다른 방법으로부터 호출에서 결과 두번째에 대한 호출의 첫 번째 결과에 대한 호출, ()내는 또 다른 신호에 상응하지 않습니다) (방출하고 그래서 연속 .

연결하는 방법

신호와 슬롯을 연결하고 올바르게 사용하지 않으면하면 발견하기 대단히 어려운 버그의 원천이 될 수있는 가지 방법이 기본적으로 있습니다. 연결의 이러한 형태) (연결 방법과 별도의 매개 변수로 전달됩니다. 그들은 다음과 같습니다

연결을 직접 : 슬롯이 즉시 신호가 신호가 발행되었습니다 스레드로 발행되었습니다라고합니다. 이것은 슬롯에 직접 호출 역할을합니다.

연결 대기 : 신호가 전송 슬롯 호출 QT의 내부 목록에가는, 그리고 신호가 전화 또는되지 않은 슬롯에 관계없이 즉시 반환됩니다. 루프 다음​​이 목록을 처리 evente 않으며, 나중에 슬롯은 객체가 슬롯있는 스레드에서 호출됩니다.

자동 연결 : 이것은 연결의 유형을 지정하지 않는 경우 사용되는 기본 유형입니다. 그것 중 하나입니다 "악의 씨앗" , 그것은 두 가지 행동을 제시 : 신호와 슬롯은 같은 스레드에있는 경우, 직접 연결로 작동하지만, 그렇지 않으면은 대기열 연결을 사용할 수 있습니다.

대기중인 연결을 차단 : 야!? 단지 세가 됐나요? 음, 이것은이 문서를 읽어야 할 한 장점이 될 것이다 : 당신이 일관 문서 저장! 이 연결 신호가 적법하게 실행될 때까지 신호 스레드가 차단되는 경우를 제외하고 대기열에 연결하는 것과 비슷합니다. 에서만 매우 신중하게 사용해야되는 것은 아니며, 서로 다른 스레드에서 신호와 슬롯. 오용은 또한 교착 상태가 발생할 수 있습니다. 이 같은 것을 볼 때 당신은 알게 될 겁니다 :

 사용자 @ 호스트 : ~ / 스톱워치 $ / 스톱워치.
 Qt는 : BlockingQueuedConnection를 활성화하는 동안 감지된 죽은 잠금 : 보낸 사람입니다
 QPushButton (0x807e2d8)는 수신기 MyDisplay (0x8076ac0)입니다

을 뜻합니다에 대한 의심 해결하려면 "객체가있는 스레드" QT arespeito 스레드를 참조하십시오.

항상 신호, 슬롯, 스레드와 타이머에 큰주의를 기울입니다. 이들은 QT의 핵심 기능이지만 그 오용은 버그로 찾을 매우 어려운 발생할 수 있습니다. 그것에 대한 모든 설명서를 참조하십시오.

아래 소스에

우리의 예제는 두 클래스 및 MyDisplay 스톱워치 파일 및 주요 공통으로 쓸 것입니다. 메인과은 QApplication 객체 스톱워치를 만듭니다. 클래스는 버튼과 LCD 디스플레이 스타일로 대화 구성된 프로그램의 MyDisplay 시각적인 부분을 담당한다. 스톱워치 클래스는 타이머를 표시하고 구현하는 위젯이 생성됩니다. 이 아키텍처는 클래스 스톱워치의 MyDisplay에서 상속이 더 재미있는, 가장 elegente하지 않습니다. 하지만 그것은 사실상 신호와 슬롯을 사용하는 필요성을 제거. 경기가 없잖나

우리가 물체가 외부와 통신하려고 할 때 신호와 슬롯의 사용은 명확하게된다. 일반적으로 클래스 밖에는지 모르겠어. 그들 내에서 외부 개체에 대한 포인터를 전달, 그것은 캡슐을 아프게하고 코드가 덜 일반 만듭니다. 우리의 예제에서 신호와 슬롯을 사용하여 더 재미있는이가 일반 또는 캡슐에서 길을 않고, 객체 (내부 스톱워치) /에서 객체 스톱워치 (외부 Mydisplay)에보고 이벤트에 myDisplay입니다.

Qt 디자이너 (다른 문서에 제가 얘기를합니다)의 도움으로 저는 대화 상자, 버튼 및 LCD를 만들었습니다. 후에 우리의 목적에 맞게 코드를 단순화. myDisplay는 QDialog에서 상속, 이것은 간접적으로 충분 클래스 선언의 전용 섹션에서 Q_OBJECT 매크로를 추가하려는 순간 신호와 슬롯을 사용하려면 QObject에서 상속하는 방법. 그 후, 다른 auxiliaries, 방법 사이에 추가 :

  공용 슬롯 :
     long ) ; 무효 slotDisplayValue (길이);

 전용 슬롯 :
     slotPlay ()을 무효화;
     공극 slotStop ();

 신호 :
     signalPlay ()을 무효화;
     signalPause ()을 무효화;
     공극 signalStop ();
     공극 signalReset (); 

징후 버튼 클릭과 관련된 외부 이벤트에 통신합니다. 대중이 외부에서 타이머 진드기를받을 권리가있다면서 이미 민간 슬롯은 사전 처리 절차를 만들 것입니다. 따라서, 클래스 외부에 정보를 보내고 반대편에 무엇 알지 못하고, 외부에서 정보를받습니다. 좋은 오래된 인터페이스 규약.

  공용 슬롯 :
     slotPlay ()을 무효화;
     slotPause ()을 무효화;
     공극 slotStop ();
     공극 slotReset ();

 전용 슬롯 :
     공극 slotTick ();

 신호 :
     long ) ; 공극 signalTicks (길이); 

아날로그와 반대로 스톱워치 클래스의 신호 MyDisplay 수업을받을 슬롯을 구현하고, 공공의 슬롯에 정보를 보내는 신호를 선언합니다.

또한 카운터를 증가, 매 10 밀리초 (우리의 친구 lerdinhos 비스타를 따를 수 있도록!) 발사한다 QTimer를 구현합니다. 이 카운터는 디스플레이 형식과 디스플레이로 전송됩니다.

타이머가 중지 수 있고, 일시 중지하고 적절한 단추를 클릭하여 언제든지 다시 시작.

Finalmentes

예제 자체는별로 코드가 아니지만, 그것은 타이머 및 맞춤형 신호와 슬롯 건설의 가장 기본적인 사용을 보여줍니다. 특별한주의는 그러나, 이러한 자원의 이용과 관련 자세한 내용은 부여해야, 그들은 치명적인 함정이 될 수 있습니다.

중요 링크

신호와 슬롯
QTimer
QT의 스레드
QT의 온라인 문서

부 전 QT 년부터

2008년 1월 26일 ·에 게시된 C / C + + , Qt는 · 보기 댓글

요청이있을 경우, 제가 QT 함께 향한 시작 보여주는 간단한 문서를하기로 결정했습니다.

공간 (예, 우주가 당신의 친구, 떠나지 않을 것입니다)과 여분의 표제와 apanas 20 줄을,, 이미 프레임 워크의 주요 특징을 사용하여 '여러분, 안녕하세요 "차트를 만들 수 있습니다.

나는 다른 플랫폼에서 테스트 할 방법이 없기 때문에, 제가 사용하는 플랫폼이 * nix에서 스크립트는 것을 가정하고, 그리고 QT 개발 라이브러리가 이미 설치되어 있는지뿐만 아니라 표준 빌드 도구를 제공합니다. QT가 설치되어 있지 않은 경우, 그것이 좀 걸릴 것이 시간 링크를 .

완전한 소스 코드는 예제에서 다운로드할 수 있습니다 여기 지만 손으로 그것을 할 ​​원하신다면 어디서든 qthello에 다음과 같은 내용을 main.cpp라는 파일 안에 디렉토리를 만듭니다 :

  01 # <qapplication> 포함
 02 # <qwidget> 포함
 03 # <qpushButton> 포함
 04
 main ( int argc , char ** argv ) 05 int는 메인 (int는 argc, 문자 ** argv가)
 06 {
 app ( argc , argv ) ; 07 QApplication 응용 프로그램 (argc, argv가);
 window ; 08 QWidget 창;
 button ( "Hello World!" , & window ) ; 09 버튼 QPushButton ( "안녕하세요!", & 창);
 10
 ( 300 , 200 ) ; 11크기 조정 (300, 200).;
 ( 100 , 85 , 100 , 30 ) ; 12. 버튼 SetGeometry (100, 85, 100, 30);
 13
 :: connect ( & button , SIGNAL ( clicked ( ) ) , 14 QObject :: 연결 (& 단추, 신호 (()를 클릭)
                          SLOT ( quit ( ) ) ) ; 및 응용, 슬롯 () (종료));
 15
 ( ) ; 16표시 ().;
 app. exec ( ) ; . 17 수익 응용 프로그램 EXEC ();
 19}
 20 

이제 터미널로 가서 해당 디렉토리 및 유형 qmake-프로젝트.

모두가 제대로 설치되어 있으면 파일 qthello.pro이 만들어진 게 분명했다. 더 qthello.pro 디렉토리가없는 경우 다음 이전 단계를 검토하십시오.

단자 타입 qmake에 &&에 정착 다 만들어 함께. 이 예제를 컴파일하며 모든 운동을, qthello라는 실행 파일을 만들었습니다.

. / Qthello 그것을 실행하고 버튼 창이 나타납니다.

소스 코드 : 그래, 재미있는 부분은 지금 봅시다.

처음 세 라인은 우리가 QT를 사용하는 수업에 관한 표제만을 포함합니다.

라인 7은 QT 응용 프로그램을 선언하고 쉘 프로그램에서받은 매개 변수로 전달합니다. QApplication 클래스는 프로그램의 설정의 주요 흐름을 관리합니다. 그것은 인터페이스와 다른 출처 모두에서 모든 이벤트 처리 및 선적됩니다 메인 이벤트 루프를 포함하고 있습니다. 그것은 또한 다른 것들 사이에 프로그램의 시작과 종료를 관리합니다.

라인 8은 우리의 주요 그래픽 요소가 될 것이다 위젯을 선언합니다.

9 호선은! "안녕하세요"텍스트 단추를 선언하고 그 주요 위젯의 "아들"있습니다. 이 버튼은 기본 위젯에 표시하게됩니다.

줄 11시 12분는 형태와 입지의 구성 요소 선택을 구성합니다.

라인 14 프레임 워크의 주요 특징 중 하나인 신호 슬롯 시스템을 보여줍니다.

신호와 슬롯은 객체 사이의 통신을 실현하는 데 사용됩니다. 이 시스템은 개체 (방출) 하나 (이상) 객체 (들)에 의해 캡처하고 처리할 수있는 이벤트 (신호) 쏠 수 통해서. 신호와 슬롯 클래스의 특별한 방법입니다. 기본적으로 신호의 방출을 통해 슬롯을 호출로 번역되어 moc (메타 오브젝트 컴파일러) 어떤 preprocesses 컴파일하기 전에 소스 코드를. 신호와 슬롯을 구현하는 각 클래스 들어, 다음 코드의 나머지 부분과 함께 컴파일 moc_nomedaclasse.cpp라는 파일을 생성합니다. 이것은 모두 투명하게 수행되고 프로그래머는 보통 이러한 세부 사항에 대해 걱정할 필요가 없습니다. 실용적인 관점에서 신호 전달 동일한 매개 변수와 함께 연결을 통해 연관된 슬롯이 어떻게든 호출된다는 신호 signigica을 방출. 자세한 내용은 온라인 설명서에서 확인하실 수 있습니다.

우리의 예제에서는 링크가 슬롯 () 객체의 구현을 종료 함께 객체 버튼을 클릭한 신호 ()를 연결합니다. 이 버튼을 클릭하면, 신호가 트리거하고 이후 응용 프로그램 개체에 의해 점령 후 프로세스가 종료되는 것을 의미합니다.

그것이 표시가됩니다 있도록 라인 16에서, 위젯의 쇼 () 메서드를 호출합니다.

라인 17에서, 우리는 마침내 QT를위한 프로그램을 제어합니다. 간부인 () 메소드는 메인 루프 및 모든 메커니즘을 해고하고, 신청이 완료되는 경우에만 반환, 우리의 경우에는 app.quit ()가 시스템에 신호를 슬롯을 통해 호출될 때.

이 간단한 "안녕하세요"는 바보 같이 들리겠지만, 그것은 메인 루프, 그래픽 객체의 생성 및 신호와 슬롯의 사용으로 QT의 일부 주요 기능을 보여주는 정도입니다.

다음 포스트에서 나는 우리 자신의 신호와 슬롯 및 타이머의 사용을 만들 표시됩니다.

참조 :
QApplication
QWidget
QPushButton
신호와 슬롯

QT와 멀티 윈도우를위한 간단한 인터페이스 관리자를 구축

2008년 1월 24일 ·에 게시된 C / C + + , Qt는 · 보기 댓글

여러 번 나는 그래픽 또는 텍스트 모드에 관계없이 여러 화면과 유지 보수 시스템 인터페이스를 제공하는 데 결국. 종종 화면의 숫자는 항상 애매한 통화, # ifndefs, 스위치 및 기타 괴물의 엉키는게 이끌 사전 계획없이 시스템과 함께 성장했습니다.

제가 늦게처럼 게임의 첫 번째 버전을 짓을 때, 성별의 문제를 마주 쳤 처음이었다 Elifoot CEFETES에서 공정한합니다. 당시 나는 그들이 서로 전화 목표가 된 경우에만 반환 함수의 집합을 발견 했어. 결과 : 거기 쌓아! (이 새 버전에서 수정되었습니다 걱정하지 마세요!)

멀티 윈도우와 인터페이스의 경우, 및 계획 - 더 - 플라이에서 발생하는 시스템에서, 파괴와 공포의 흔적을 남기는에 창문 등등를 닫기 전에 다른 창을 불러 창문을 가지고 일반적입니다. 날 믿어, 혹시 같은 rapp의 유지를 이어받기를 원하지 않습니다.

먼지는 먼지로 ...

내 경우엔, resovi 인터페이스 관리자를 만들어 문제. 인터페이스 개체의 생성 및 파괴를 제어하는​​ 중앙 개체입니다. 각 개체는 자신의 작업 관리자에 대한 신호를 완료하고 그 난장판을 청소 담당한다. 따라서 객체가 태어난 때마다, 죽으 앞으로 프로그램의 제어를 통과하지 않고는 작업을 수행, 항상 관리자로 돌아옵니다.

제가 관리자가 객체를 파괴할 것이라고 말하지 않습니다,하지만 청소를 할 것입니다. 각 개체에는 관리자에게 그 중 하나를 성공적으로 또는 실패, 완료 때마다 경고를하기 위해 건설되어야한다. Muitas vezes o próprio objeto é capaz de “se matar” sozinho e isso é muito útil, tirando um pouco do trabalho do gerenciador, mas não o controle.

Before starting

Eu não tenho a pretensão que esse simples post cubra todos os recursos do QT ou todos os aspectos do gerenciamento de interfaces. Eu apenas vou falar de como EU resolvi um problema pelo qual eu passei. Esse post também é uma homenagem a um amigo paulista-carioca que já teve que descascar um abacaxi desses!

Mão na massa

Eu sou, na maioria das vezes, um programador bottom-up, porém um analista top-down. Isso pode parecer confuso, mas não há razão para pânico, ou quase…

Os objetos precisam trocar mensagens. Para isso o sistema de sinal-slot do QT vai ser de grande ajuda. Os objetos vão mandar sinais ( emit(signal) ) eo gerenciador vai escutá-los ( slots() ).

Por incrível que pareça, o construtor do gerenciador, daqui pra frente chamado de UIM, não possui uma linha de código sequer. Ele apenas inicializa os ponteiro com 0, apenas por paranóia (ou não)…

O UIM implementa slots para criação dos objetos e limpeza da bagunça. Ao criar um objeto, o UIM conecta esse objeto ao seu respectivo slot de limpeza. Quando o objeto morre, ele ativa o slot de limpeza no UIM. Os slots de criação serão ligados aos menus do objeto gráfico principal, neste exemplo, uma janela.

Os outros objetos são janelas menores, dialogs, sendo um para configuração do aplicativo, e dois pra falar de si mesmo (about), afinal, marketing é importante…

Todos os objetos gráficos eu cliquei e arrastei no Qt Designer e depois ajustei pra ficar do meu jeito. Nada de ficar alinhando pixel na mão, afinal não é uma obra de arte, é só uma prova de conceito.

Os Objetos Gráficos

A tela de configuração é um diálogo comum com um combo-box onde está uma lista de parâmetros a serem passados para o widget principal. Os detalhes que eu acrescentei ao código gerado pelo Qt Designer foram um destrutor, e um par sinal-slot para enviar os dados selecionados de volta para o gerenciador. Eu não me preocupei em guardar o estado da configuração atual. Isso é papo pra outro post.

abouts은 기본적으로 동일한 코드 플러스 destructors 있었다.

메인 창은 다른 창과 점멸되는 사각형의 위젯 미친 전체를 호출하는 메뉴가 있습니다. 네모는 창 구성을 변경합니다 정보의 금액입니다.

매직 QT

수업은 QWidget 클래스에서 상속하기 때문에 사용된 모든 그래픽 객체는 또한 QWidgets 있고, 나는 각 상속된 메서드에서 다음과 같은 생성자를 사용합니다 :

  이 -> setAttribute (Qt는 :: WA_DeleteOnClose 사실); 

에 따르면 온라인 문서 , 이건가 닫힐 때 위젯을 삭제해야한다는 Qt는을 알려줍니다. 그렇지 않으면, 그것은 단지 숨겨져 있습니다.

"... 위젯은 가까운 이벤트를 허용하면 숨겨진가 ..."

당신이 그것을 닫을 때 위젯이 삭제하길 원한다면, "...의 Qt와 함께 만들 :: 플래그를 WA_DeleteOnClose. 이것은 다중 윈도우 응용 프로그램에서 독립적인 최상위 윈도우에 매우 유용합니다 ... "

등의 취소 또는 닫기를 클릭 등 실패,에 객체 엔드를 만드는 안무는 직접 자체 슬롯 주변 ()에 연결되어 있습니다. 이것은 객체의 파괴로 절정에 달하다되는 이벤트의 시리즈를 트리거합니다.

객체가 루틴은 UIM로 돌아가려면 이동했다, 그러한 확인을 클릭하고 데이터를 보내는 것처럼 성공적으로 완료, 그래서 경로들을 수 있습니다. 데이터를 받고 나면 UIM 슬롯 직접 개체의 닫기 ()를 호출합니다.

개체가 파괴되면, 그의 마지막 숨을 말, (파괴 기호)를 보냅니다. 말 그대로 그는 "나는 대단!"으악.

"외부"개체에서 UIM은 일상적인 청소 및 TADÃM이 신호를 연결 듣고있다! 준비.

제가 사용한 예제에서는 화면에서 사각형의 크기는 물체의 MyConf갑니다, UIM은 MyApplication으로 라우팅됩니다 통과. 이 전달 그것 미친 내부 위젯에 차례 인치

작은 창이 열립니다하면서 더욱 흥미로운 얻으려면 도구 해치를 닫을 때 반환, 깜박임을 중지합니다. 그것은 바보 같이 들리겠지만 그것은 바로 UIM 전체 제어 sobreo 그녀가 초점이 아닌 동안 무엇인지, 각 윈도우에서 일어나는 있다고 표시했습니다.

결론

QT 프레임 워크는 엄청난이며 거대한 범위의 기능을 제공합니다. 하나는 객체가 파괴되는 방식을 제어할 수 있습니다. 약간의 계획과 함께 시그널 - 슬롯 시스템과 이것을 함께 사용하면으로 선회하지 않고, 매우 복잡한 인터페이스를 구축할 수 Tarrasque 유지하는 시간.

출처 :

http://doc.trolltech.com

추신 : 완전한 소스 코드 예제가 GPL하에이를 통해 다운로드받을 수 있습니다 링크 . 언젠가 나는 그것에 코멘트를 넣어 ...

BUGFIX

불행한 곤충은 클래스 생성자 MySquares의 초기화 속성의 부재에 숨겼다. '세그먼트화 오류'를 초래하기 때문에 애완 동물은 작은가, 독성, 었 지만요. 난 어디에 대한 있었고, 닫힌 경우, 프로그램을 시작하면 화면이 이미 제대로 구성되었다는 가정을 막아야 이벤트의 시퀀스를 쐈어. 수정 코드는 위의 링크에서, 그리고 기억하세요 :

"항상 변수를 초기화"