달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

QString을 char* 형으로 변환시켜야 할 일이 생겼다.

예전 프로젝트에서 아래 코드 처럼 문제없이 사용했었다.

데스크탑에서도 단말기에서 정상적으로 아주 잘 작동했다.

QString str = "test";

chart * pCh = str.toStdSring().c_sr();


새로운 프로젝트의 데스크 탑에서도 역시 문제 없이 동작하는 것을 확인했다.

단말기에서는 동작하지 않는 다는 버그 리포트를 받았다.


엥!!!!!


찾아보니 비슷한 문제를 겪는 사람들이 있다는 것을 알게 되었다.

QT 포럼(std::string destructor crashing in Release when using ::toStdString methods)


아래와 같이 변환하는 걸 권장한다고 한다.

QString str = zzzzz;

QByteArray ary = str.toUtf8();

const char* pChr = ary.constData();


Posted by 생짜
|

make 컴파일시 'Clock skew detected' 오류가 발생하는 경우가 있다.

보통 VMWARE를 사용할 때 자주발생하는 오류로 시스템 시간과 컴파일하고자 하는 소스파일의 시간이 맞지 않는 경우에 발생한다.

다시 말해 시스템 시간보다 소스파일의 시간이 더 앞일 경우에 주로 발생한다.

시스템 시간과 소스파일의 시간을 동기화 하면 해결 할 수 있다.


'karma( 업 ) > QT&QML Error' 카테고리의 다른 글

QString::toStdString() 오류  (412) 2018.06.20
VMPlayer에서 QT Creator사용시 발생할 수 있는 Error  (0) 2017.05.08
staticMetaObject error  (0) 2017.05.04
qmlRegisterType 등록 error  (0) 2017.05.02
Posted by 생짜
|

VMPlayer의 우분투 가상이미지에서 QT Creator를 설치하고 작업중이다.


SVN Repository는 Windows에 존재한다.

VMPlayer의 'Shared Folders' 기능을 이용하여 우분투 가상이미지에서 Windows의 SVN Repository를 공유를 한 후 QT Creator에서 Build를 실행하니 Error가 발생했다.


Build Error Message는 

'warning: Clock skew detected. Your build may be incomplete.' 

또는 

Build 폴더와 source 폴더가 같은 디렉토리에 있어야 한다는 Error 메시지이다.

그리고 문제를 해결하는데 결정적 단서가 된

Symbolic Link unsupport 라는 메시지가 있다.


QT Project 는 Lib를 만든 후 lib를 링크하여 사용하는 App을 빌드하는 Project이다.

리눅스의 Symbolic Link는 Windows에서 만들어지지 않는다. 그것도 모르고 windows의 공유폴더에서 계속 빌드를 하니 lib가 문제가 됐던 것이다.

Symbolic Link Lib가 안만들어지고 이 Lib가 안만들어지니 Lib를 사용하는 App에서 cann't find file 이라는 Error가 발생하며 build  실패가 됐던 것이다.


문제를 해결하기 위해 다음과 같이 조치했다.

windows 공유폴더에 있던 소스폴더를 우분투 가상이미지로 옮기 후 

QT Creator에서 Project Open, 

Project Open 후 Project setting 버튼(  ) 선택하여 Project Setting창을 연 후

Build 폴더의 path를 설정해 주면 문제를 해결 할 수 있다.

붉은색의 네모 박스에 있는 경로가 문제가 되었던 windows 공유폴더이다. 이 경로를 리눅스의 소스폴더가 있는 폴더로 변경해주면 문제가 해결된다.




'karma( 업 ) > QT&QML Error' 카테고리의 다른 글

QString::toStdString() 오류  (412) 2018.06.20
'Clock skew detected. Your build may be incomplete' Error  (0) 2017.05.08
staticMetaObject error  (0) 2017.05.04
qmlRegisterType 등록 error  (0) 2017.05.02
Posted by 생짜
|

C++ 클래스를 만든 후 QML Object Type으로 사용하기 위해서는 qmlregistertype 함수를 이용하여 QML Engine에 C++ 클래스를 등록해야 한다.


이 과정에서 qmlregistertype 함수의 내부에서 staticMetaObject error 가 발생했다.

나한테 발생한 staticMetaObject error는 lib로 만든 C++ 클래스를 QML App에서 불러오지 못해 발생한 error 였다.  .pro 파일을 수정하여 C++ 클래스 lib를 include할 수 있도록 해서 해결했다.


흔히 발생하는 staticMetaObject 에러는 QT 클래스를 상속받은 클래스에서 'Q_OBJECT' 키워드를 사용하지 않고 sginal / slot을 만들 경우에 발생한다고 한다.


즉 다시 말해 QT 클래스를 상속받은 모든 클래스는 의무적으로 'Q_OBJECT'를 사용해야 한다.

이건 규칙~~~~

Posted by 생짜
|

QT에서 QT 객체를 상속받아 Class구현할 때 아래와 같이 생성 에러가 날 때가 있다.

이 경우 상속 받은 QT 객체에서 꼭 구현해야 할 virtual 로 선언되어 있는 멤버 함수들을 정의하지 않아서 에러가 발생하는 것이다. 




예를 들어 QQuickPaintedItem 이란 QT 클래스를 상속 받은 자식 클래스에서


QQuickPaintedItem  클래스의 virtual 선언된 멤버함수들을 정의해주면 에러가 없어진다.




Posted by 생짜
|