C + + 에서 Qt 개발 과정 까지

14772 단어 qt
http://www.chengxuyuans.com/Symbian/10479.html
본 고 는 C + + 에서 Qt 개발 과정 을 소개 하 는데 Qt 에 대해 모두 가 잘 알 고 있 을 것 입 니 다. Qt 크로스 플랫폼 의 C + + 그래 픽 사용자 인터페이스 라 이브 러 리 입 니 다. Qt 는 완전히 대상 을 대상 으로 하고 확장 이 쉬 우 며 진정한 구성 요소 프로 그래 밍 을 허용 합 니 다.그럼 본문 소개 부터 봅 시다.
Qt 게시판 에 서 는 네티즌 들 의 불평 을 자주 볼 수 있다.
QPixmap ("dbzhang 800. png") 에서 그림 을 불 러 오 는 데 실 패 했 습 니 다.
QFile ("dbzhang 800. txt") 파일 열기 실패  ...
이런 질문 에 저 는 일반적으로 프로 세 스 의 '작업 디 렉 터 리' 와 프로그램 이 있 는 디 렉 터 리 를 구분 하 는 것 에 주의 하 십시오.그러나 이런 대답 은 너무 창백 해 보 이 는 것 같다. 그렇다면 정리 하 자.
상대 경 로 를 사 용 했 습 니 다. '상대' 가 그 디 렉 터 리 에 대한 것 임 을 아 십 니까?
당신 이 Qt 를 불평 할 때, 당신 은 그것 이 Qt 와 무관 하 다 는 것 을 알 고 있 습 니까?
Qt 는 C + + 의 라 이브 러 리 입 니 다. C + + 부터 봅 시다.
상대 경로
파일 작업 을 처음 접 했 을 때, 우 리 는 모두 이런 간단 한 애플 릿 을 쓴 적 이 있 을 것 이다.

  
  
  
  
  1. #include <stdio.h> 
  2. int main()  
  3. {  
  4.    FILE * pFile = fopen ("dbzhang800.txt" , "r");  
  5.    if (pFile == NULL) {  
  6.        perror ("Error opening file");  
  7.    } else {  
  8.      //do something  
  9.      fclose (pFile);  
  10.    }  
  11.    return 0;  

실행 가능 한 파일 의 동급 디 렉 터 리 에 dbzhang 800. txt 파일 을 설치 한 다음 컴 파일 러 컴 파일 러 를 호출 합 니 다.

  
  
  
  
  1. cl abc.cpp 

혹시

  
  
  
  
  1. g++ abc.cpp -o abc 

그리고 프로그램 abc 를 실행 합 니 다. 모든 것 이 정상 입 니 다. 그 렇 죠?
이 때 문인 지 디 렉 터 리 에 비해 프로그램 이 있 는 디 렉 터 리 라 는 오 해 를 많이 받 고 있 습 니 다!
당신 은 해 본 적 이 있 습 니까?

  
  
  
  
  1. |-- dir1\  
  2. |    |-- abc(.exe)  
  3. |    `-- dbzhang800.txt  
  4. |  
  5. `-- dir2\ 

터미널 (또는 cmd 창) 에서 디 렉 터 리 를 dir 2 로 전환 한 다음... / dir 1 / abc 를 통 해 프로그램 을 실행 하면 텍스트 파일 을 찾 을 수 있 습 니까?
찾 으 려 면 이 파일 을 어느 디 렉 터 리 에 두 어야 합 니까?
작업 목록
상대 경 로 를 만나면 작업 디 렉 터 리 (working directory) 를 돌 릴 수 없습니다.현재 작업 디 렉 터 리 (c urrent) 라 고도 부 릅 니 다.  w orking d irectory) 모든 상대 경 로 는 작업 디 렉 터 리 에서 부터 설명 합 니 다.우 리 는chdir 등 함수 로 프로 세 스 의 작업 디 렉 터 리 를 변경 합 니 다.
앞의 예 를 들 어 만약 에 작업 디 렉 터 리 에 대해 감각 이 없다 면 직접 출력 해서 직접 보 세 요. (네트워크 에서 다른 poix 등 이 제공 하 는 함 수 를 볼 수 있 습 니 다. 우 리 는 ISO C + 표준 중의 함수 만 사용 합 니 다)

  
  
  
  
  1. #include <direct.h> 
  2. #include <stdlib.h> 
  3. #include <stdio.h> 
  4. int main( void )  
  5. {  
  6.    char* buffer;  
  7.    if( (buffer = _getcwd( NULL, 0 )) == NULL ) {  
  8.       perror( "_getcwd error" );  
  9.    } else {  
  10.       printf( "Current Dir: %s 
    ", buffer);  
  11.       free(buffer);  
  12.    }  

(1) 우리 호출getcwd 에서 현재 작업 디 렉 터 리 를 가 져 옵 니 다.
(2) 터미널 이나 cmd 에서 다른 디 렉 터 리 로 전환 할 수 있 습 니 다. 절대 경 로 를 통 해 이 프로그램 을 호출 하여 출력 을 관찰 할 수 있 습 니 다.
(3) Liux 에 있 으 면 실행 기 를 만 들 고 실행 기 에 작업 디 렉 터 리 를 설정 할 수 있 습 니 다.
(4) windows 에서 단축 키 를 만 들 수 있 습 니 다. 단축 키 속성 에서 작업 디 렉 터 리 를 설정 / 수정 할 수 있 습 니 다.
프로 세 스 내 작업 디 렉 터 리 수정
무료 한 예 를 보 자.

  
  
  
  
  1. #include <stdio.h> 
  2. #include <direct.h> 
  3. int main()  
  4. {  
  5.     _chdir("c:\\temp");  
  6.    FILE * pFile = fopen ("dbzhang800.txt" , "r");  
  7.    if (pFile == NULL) {  
  8.        perror ("Error opening file");  
  9.    } else {  
  10.      //do something  
  11.      fclose (pFile);  
  12.    }  
  13.    return 0;  

쓰다  _chdir   작업 디 렉 터 리 수정
현재 프로그램 은 CD temp 디 렉 터 리 의 텍스트 파일 을 열 것 입 니 다.
주:chdir   화해시키다  _getcwd 는 모두 해당 하 는 와 이 드 문자 (wchar t) 버 전이 있 습 니 다. 이 버 전 은 언급 되 지 않 습 니 다. (와 이 드 문 자 를 사용 하려 면 이 문 C 소스 파일 의 중국어 (2) 를 먼저 고려 해 보 세 요.
Qt 로 돌아 가기
Qt 는 C + + 의 라 이브 러 리 이기 때문에 위의 물건 을 직접 사용 할 수 있 습 니 다.그러나 Qt 가 더 좋 은 것 을 제공 하기 때문에 QDir 는 Qt 에서 앞에서 언급 한 C, C + + 의 중 함 수 를 사용 할 생각 은 하지 않 을 것 이 라 고 생각 합 니 다.
메모: 작업 할 파일 이 읽 기 전용 이 고 프로그램 컴 파일 이 끝 난 후에 이 파일 들 은 변화 가 필요 없다 면 먼저 Qt 의 자원 파일 을 사용 하 는 것 을 고려 하 십시오. qrc (본 고 는 이 부분 과 관련 되 지 않 습 니 다).
아래: 앞의 두 함수 가 Qt 에 있 는 등가물 을 살 펴 보 자.
작업 디 렉 터 리 가 져 오기
작업 디 렉 터 리 에 익숙 하지 않 으 면 상대 적 인 경 로 를 사용 하 는 데 문제 가 생 겼 을 때 다음 문 구 를 사용 하 는 것 을 먼저 고려 하 십시오.

  
  
  
  
  1. qDebug()<<QDir::currentPath(); 

네가 예상 한 것 과 일치 하 는 지 보 자.
작업 디 렉 터 리 수정
너 는 이 조작 을 거의 필요 로 하지 않 는 다.
만약 당신 이 사용 했다 면 주의 하 세 요.

  
  
  
  
  1. bool QDir::setCurrent ( const QString & path ) [static] 

... 이 아니 라

  
  
  
  
  1. bool QDir::cd ( const QString & dirName )  
  2. bool QDir::cdUp ()  
  3. void QDir::setPath ( const QString & path ) 

프로그램 이 있 는 디 렉 터 리 프로그램 이 그 디 렉 터 리 에 있다 는 것 을 어떻게 알 았 는 지, 이것 은 플랫폼 과 관련 된 문제 입 니 다. (ISO C, C + + 는 아직 우리 에 게 답 을 알려 줄 수 없 는 것 같 습 니 다.)다행히 Qt 는 좋 은 포장 을 제공 했다.

  
  
  
  
  1. QString QCoreApplication::applicationDirPath () [static] 

상대 적 인 경로 로 접근 하고 실행 가능 한 프로그램의 같은 디 렉 터 리 에 있 는 파일 을 사용 하려 면 작업 디 렉 터 리 를 이 디 렉 터 리 로 설정 할 수 있 습 니 다!
또는 (이것 은 더 좋 은 방법 이 어야 합 니 다) 이 디 렉 터 리 와 당신 의 상대 경 로 를 먼저 절대 경로 로 조합 한 다음 에 사용 합 니 다.
그러나 이 문제 가 있 습 니까? windows 에서 Qt 를 사용 할 때 실행 가능 한 프로그램 은 debug 나 release 디 렉 터 리 에 있 습 니 다. 우리 가 방문 할 파일 은 procject. pro 파일 이 있 는 디 렉 터 리 (또는 하위 디 렉 터 리) 에 있 습 니 다.이거 어 떡 하지?
유용 한 함수
프로젝트 디 렉 터 리 에 있 는 doc / dbzhang 800. txt 파일 에 접근 하고 싶다 면:

  
  
  
  
  1. |-- project.pro  
  2. |-- doc\  
  3. |     `-- dbzhang800.txt  
  4. |  
  5. |-- release\  
  6. |     `-- abc.exe  
  7. |  
  8. `-- debug\  
  9.       `-- abc.exe  

QFile(doc/dbzhang800.txt);좋아요?QtCreator 등 환경 에서 실행 되면 보통 일 을 할 수 있 지만 debug 에 들 어가 서 더 블 클릭 을 하면 일 을 하지 않 습 니 다.
문제 해결 방안 은 C + + GUI Qt4 프로 그래 밍 에서 나 왔 습 니 다. 이 함 수 를 본 적 이 있 을 거 라 고 믿 습 니 다.

  
  
  
  
  1. QDir directoryOf(const QString &subdir)  
  2. {  
  3.     QDir dir(QApplication::applicationDirPath());  
  4.  
  5. #if defined(Q_OS_WIN)  
  6.     if (dir.dirName().toLower() == "debug"  
  7.             || dir.dirName().toLower() == "release"  
  8.             || dir.dirName().toLower() == "bin")  
  9.         dir.cdUp();  
  10. #elif defined(Q_OS_MAC)  
  11.     if (dir.dirName() == "MacOS") {  
  12.         dir.cdUp();  
  13.         dir.cdUp();  
  14.         dir.cdUp();  
  15.     }  
  16. #endif  
  17.     dir.cd(subdir);  
  18.     return dir;  

이 함 수 는 어떻게 사용 합 니까?   우 리 는 단지:

  
  
  
  
  1. QFile(directoryOf("doc").absoluteFilePath(dbzhang800.txt));

shadow build 
qmake 는 일찍부터 shadow build 기능 을 제 공 했 지만 QtCreator 가 기본적으로 이 기능 을 사용 한 후에 대부분의 사람들 이 이 기능 을 알 아차 리 기 시작 했다.

  
  
  
  
  1. |-- project-sources/  
  2. |       |-- project.pro  
  3. |       `-- main.cpp  
  4. |  
  5. |-- build-vs2008/  
  6. |       |-- Debug/  
  7. |       |    `-- main.exe  
  8. |       `-- Release/  
  9. |            `-- main.exe   
  10. |-- build-vs2005/  
  11. |-- build-mingw/  
  12. |-- build-symbian/  
  13. |-- build-dbzhang800/  
  14. |-- .. 

여 기 는 신기 한 점 이 없습니다. 다만 일반 자료 에 qmake 를 소개 하 는 것 은 모두 이렇게 말 합 니 다.

  
  
  
  
  1. qmake project.pro 

make 와 qtcreator 는 이렇게 합 니 다.

  
  
  
  
  1. cd ../build-vs2008  
  2. qmake ../project-sources/project.pro  
  3. make 

이런 상황 에서 우 리 는 일반적으로 일부 파일 을 구축 디 렉 터 리 에 복사 해 야 하 며 구체 적 으로 참고 할 수 있다.  http://blog.csdn.net/dbzhang800/archive/2011/04/23/6343838.aspx 마지막 으로 준 코드 입 니 다.
소결: 이 장 은 상대 적 인 경로 에서 말 하면 C + 에서 Qt 까지 의 과정 을 다 루 고 있 습 니 다. 당신 도 많이 배 웠 을 거 라 고 믿 습 니 다.이 글 이 당신 에 게 도움 이 되 기 를 바 랍 니 다!!

좋은 웹페이지 즐겨찾기