C + + 에서 Qt 개발 과정 까지
14772 단어 qt
본 고 는 C + + 에서 Qt 개발 과정 을 소개 하 는데 Qt 에 대해 모두 가 잘 알 고 있 을 것 입 니 다. Qt 크로스 플랫폼 의 C + + 그래 픽 사용자 인터페이스 라 이브 러 리 입 니 다. Qt 는 완전히 대상 을 대상 으로 하고 확장 이 쉬 우 며 진정한 구성 요소 프로 그래 밍 을 허용 합 니 다.그럼 본문 소개 부터 봅 시다.
Qt 게시판 에 서 는 네티즌 들 의 불평 을 자주 볼 수 있다.
QPixmap ("dbzhang 800. png") 에서 그림 을 불 러 오 는 데 실 패 했 습 니 다.
QFile ("dbzhang 800. txt") 파일 열기 실패 ...
이런 질문 에 저 는 일반적으로 프로 세 스 의 '작업 디 렉 터 리' 와 프로그램 이 있 는 디 렉 터 리 를 구분 하 는 것 에 주의 하 십시오.그러나 이런 대답 은 너무 창백 해 보 이 는 것 같다. 그렇다면 정리 하 자.
상대 경 로 를 사 용 했 습 니 다. '상대' 가 그 디 렉 터 리 에 대한 것 임 을 아 십 니까?
당신 이 Qt 를 불평 할 때, 당신 은 그것 이 Qt 와 무관 하 다 는 것 을 알 고 있 습 니까?
Qt 는 C + + 의 라 이브 러 리 입 니 다. C + + 부터 봅 시다.
상대 경로
파일 작업 을 처음 접 했 을 때, 우 리 는 모두 이런 간단 한 애플 릿 을 쓴 적 이 있 을 것 이다.
- #include <stdio.h>
- int main()
- {
- FILE * pFile = fopen ("dbzhang800.txt" , "r");
- if (pFile == NULL) {
- perror ("Error opening file");
- } else {
- //do something
- fclose (pFile);
- }
- return 0;
- }
실행 가능 한 파일 의 동급 디 렉 터 리 에 dbzhang 800. txt 파일 을 설치 한 다음 컴 파일 러 컴 파일 러 를 호출 합 니 다.
- cl abc.cpp
혹시
- g++ abc.cpp -o abc
그리고 프로그램 abc 를 실행 합 니 다. 모든 것 이 정상 입 니 다. 그 렇 죠?
이 때 문인 지 디 렉 터 리 에 비해 프로그램 이 있 는 디 렉 터 리 라 는 오 해 를 많이 받 고 있 습 니 다!
당신 은 해 본 적 이 있 습 니까?
- |-- dir1\
- | |-- abc(.exe)
- | `-- dbzhang800.txt
- |
- `-- dir2\
터미널 (또는 cmd 창) 에서 디 렉 터 리 를 dir 2 로 전환 한 다음... / dir 1 / abc 를 통 해 프로그램 을 실행 하면 텍스트 파일 을 찾 을 수 있 습 니까?
찾 으 려 면 이 파일 을 어느 디 렉 터 리 에 두 어야 합 니까?
작업 목록
상대 경 로 를 만나면 작업 디 렉 터 리 (working directory) 를 돌 릴 수 없습니다.현재 작업 디 렉 터 리 (c urrent) 라 고도 부 릅 니 다. w orking d irectory) 모든 상대 경 로 는 작업 디 렉 터 리 에서 부터 설명 합 니 다.우 리 는chdir 등 함수 로 프로 세 스 의 작업 디 렉 터 리 를 변경 합 니 다.
앞의 예 를 들 어 만약 에 작업 디 렉 터 리 에 대해 감각 이 없다 면 직접 출력 해서 직접 보 세 요. (네트워크 에서 다른 poix 등 이 제공 하 는 함 수 를 볼 수 있 습 니 다. 우 리 는 ISO C + 표준 중의 함수 만 사용 합 니 다)
- #include <direct.h>
- #include <stdlib.h>
- #include <stdio.h>
- int main( void )
- {
- char* buffer;
- if( (buffer = _getcwd( NULL, 0 )) == NULL ) {
- perror( "_getcwd error" );
- } else {
- printf( "Current Dir: %s
", buffer);
- free(buffer);
- }
- }
(1) 우리 호출getcwd 에서 현재 작업 디 렉 터 리 를 가 져 옵 니 다.
(2) 터미널 이나 cmd 에서 다른 디 렉 터 리 로 전환 할 수 있 습 니 다. 절대 경 로 를 통 해 이 프로그램 을 호출 하여 출력 을 관찰 할 수 있 습 니 다.
(3) Liux 에 있 으 면 실행 기 를 만 들 고 실행 기 에 작업 디 렉 터 리 를 설정 할 수 있 습 니 다.
(4) windows 에서 단축 키 를 만 들 수 있 습 니 다. 단축 키 속성 에서 작업 디 렉 터 리 를 설정 / 수정 할 수 있 습 니 다.
프로 세 스 내 작업 디 렉 터 리 수정
무료 한 예 를 보 자.
- #include <stdio.h>
- #include <direct.h>
- int main()
- {
- _chdir("c:\\temp");
- FILE * pFile = fopen ("dbzhang800.txt" , "r");
- if (pFile == NULL) {
- perror ("Error opening file");
- } else {
- //do something
- fclose (pFile);
- }
- return 0;
- }
쓰다 _chdir 작업 디 렉 터 리 수정
현재 프로그램 은 CD temp 디 렉 터 리 의 텍스트 파일 을 열 것 입 니 다.
주:chdir 화해시키다 _getcwd 는 모두 해당 하 는 와 이 드 문자 (wchar t) 버 전이 있 습 니 다. 이 버 전 은 언급 되 지 않 습 니 다. (와 이 드 문 자 를 사용 하려 면 이 문 C 소스 파일 의 중국어 (2) 를 먼저 고려 해 보 세 요.
Qt 로 돌아 가기
Qt 는 C + + 의 라 이브 러 리 이기 때문에 위의 물건 을 직접 사용 할 수 있 습 니 다.그러나 Qt 가 더 좋 은 것 을 제공 하기 때문에 QDir 는 Qt 에서 앞에서 언급 한 C, C + + 의 중 함 수 를 사용 할 생각 은 하지 않 을 것 이 라 고 생각 합 니 다.
메모: 작업 할 파일 이 읽 기 전용 이 고 프로그램 컴 파일 이 끝 난 후에 이 파일 들 은 변화 가 필요 없다 면 먼저 Qt 의 자원 파일 을 사용 하 는 것 을 고려 하 십시오. qrc (본 고 는 이 부분 과 관련 되 지 않 습 니 다).
아래: 앞의 두 함수 가 Qt 에 있 는 등가물 을 살 펴 보 자.
작업 디 렉 터 리 가 져 오기
작업 디 렉 터 리 에 익숙 하지 않 으 면 상대 적 인 경 로 를 사용 하 는 데 문제 가 생 겼 을 때 다음 문 구 를 사용 하 는 것 을 먼저 고려 하 십시오.
- qDebug()<<QDir::currentPath();
네가 예상 한 것 과 일치 하 는 지 보 자.
작업 디 렉 터 리 수정
너 는 이 조작 을 거의 필요 로 하지 않 는 다.
만약 당신 이 사용 했다 면 주의 하 세 요.
- bool QDir::setCurrent ( const QString & path ) [static]
... 이 아니 라
- bool QDir::cd ( const QString & dirName )
- bool QDir::cdUp ()
- void QDir::setPath ( const QString & path )
프로그램 이 있 는 디 렉 터 리 프로그램 이 그 디 렉 터 리 에 있다 는 것 을 어떻게 알 았 는 지, 이것 은 플랫폼 과 관련 된 문제 입 니 다. (ISO C, C + + 는 아직 우리 에 게 답 을 알려 줄 수 없 는 것 같 습 니 다.)다행히 Qt 는 좋 은 포장 을 제공 했다.
- QString QCoreApplication::applicationDirPath () [static]
상대 적 인 경로 로 접근 하고 실행 가능 한 프로그램의 같은 디 렉 터 리 에 있 는 파일 을 사용 하려 면 작업 디 렉 터 리 를 이 디 렉 터 리 로 설정 할 수 있 습 니 다!
또는 (이것 은 더 좋 은 방법 이 어야 합 니 다) 이 디 렉 터 리 와 당신 의 상대 경 로 를 먼저 절대 경로 로 조합 한 다음 에 사용 합 니 다.
그러나 이 문제 가 있 습 니까? windows 에서 Qt 를 사용 할 때 실행 가능 한 프로그램 은 debug 나 release 디 렉 터 리 에 있 습 니 다. 우리 가 방문 할 파일 은 procject. pro 파일 이 있 는 디 렉 터 리 (또는 하위 디 렉 터 리) 에 있 습 니 다.이거 어 떡 하지?
유용 한 함수
프로젝트 디 렉 터 리 에 있 는 doc / dbzhang 800. txt 파일 에 접근 하고 싶다 면:
- |-- project.pro
- |-- doc\
- | `-- dbzhang800.txt
- |
- |-- release\
- | `-- abc.exe
- |
- `-- debug\
- `-- abc.exe
QFile(doc/dbzhang800.txt);좋아요?QtCreator 등 환경 에서 실행 되면 보통 일 을 할 수 있 지만 debug 에 들 어가 서 더 블 클릭 을 하면 일 을 하지 않 습 니 다.
문제 해결 방안 은 C + + GUI Qt4 프로 그래 밍 에서 나 왔 습 니 다. 이 함 수 를 본 적 이 있 을 거 라 고 믿 습 니 다.
- QDir directoryOf(const QString &subdir)
- {
- QDir dir(QApplication::applicationDirPath());
-
- #if defined(Q_OS_WIN)
- if (dir.dirName().toLower() == "debug"
- || dir.dirName().toLower() == "release"
- || dir.dirName().toLower() == "bin")
- dir.cdUp();
- #elif defined(Q_OS_MAC)
- if (dir.dirName() == "MacOS") {
- dir.cdUp();
- dir.cdUp();
- dir.cdUp();
- }
- #endif
- dir.cd(subdir);
- return dir;
- }
이 함 수 는 어떻게 사용 합 니까? 우 리 는 단지:
- QFile(directoryOf("doc").absoluteFilePath(dbzhang800.txt));
shadow build
qmake 는 일찍부터 shadow build 기능 을 제 공 했 지만 QtCreator 가 기본적으로 이 기능 을 사용 한 후에 대부분의 사람들 이 이 기능 을 알 아차 리 기 시작 했다.
- |-- project-sources/
- | |-- project.pro
- | `-- main.cpp
- |
- |-- build-vs2008/
- | |-- Debug/
- | | `-- main.exe
- | `-- Release/
- | `-- main.exe
- |-- build-vs2005/
- |-- build-mingw/
- |-- build-symbian/
- |-- build-dbzhang800/
- |-- ..
여 기 는 신기 한 점 이 없습니다. 다만 일반 자료 에 qmake 를 소개 하 는 것 은 모두 이렇게 말 합 니 다.
- qmake project.pro
make 와 qtcreator 는 이렇게 합 니 다.
- cd ../build-vs2008
- qmake ../project-sources/project.pro
- make
이런 상황 에서 우 리 는 일반적으로 일부 파일 을 구축 디 렉 터 리 에 복사 해 야 하 며 구체 적 으로 참고 할 수 있다. http://blog.csdn.net/dbzhang800/archive/2011/04/23/6343838.aspx 마지막 으로 준 코드 입 니 다.
소결: 이 장 은 상대 적 인 경로 에서 말 하면 C + 에서 Qt 까지 의 과정 을 다 루 고 있 습 니 다. 당신 도 많이 배 웠 을 거 라 고 믿 습 니 다.이 글 이 당신 에 게 도움 이 되 기 를 바 랍 니 다!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt How to use connect between incompatible signal and slotIn this I want to call a function, that function will receive a point . But this function should be invoked by a timer's...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.