달력

112024  이전 다음

  • 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

Qt 2011 Developer Dasy 세미나 자료

Qt Quick Best Practices and Design Patterns

( ftp://ftp.informatik.hu-berlin.de/pub/Linux/Qt/QT/videos/DevDays2011/TechnicalSessions/DevDays2011_-_Qt_Quick_Best_Practices_And_Design_Patterns.pdf )

by Girish Ramakrishnan


2011년 Qt 개발자 데이 세미나 발표자료이다.

큰 QML Application을 디자인 하는 최고의 방법과 다양한 QML 트릭 및 덜 알려진 특징들에 대해 발표한다고 써있다.

PDF만 있고 설명이 없어 전부 이해하는데는 한계가 있지만 몇 가지를 소개한다.


Don't have multiple signals with same name but different signature since QML can only connect to the last one • Avoid QVariant properties – Being specific allows QML do faster type coercion

QML은 마지막만 연결할 수 있기 때무에 서로 다른 객체에서 동일한 이름의 signal을 사용하지 말라는 말.

QT의 C++ 모드는 서로다른 객체에서 도일한 signal을 사용 할 수 있다. QML도 가능 한 걸로 알고 있는데 테스트 해봐야 겠다. 

QML에서 QVariant properties를 사용하지 말라는 뜻이다. QML에는 QVariant type의 property는 없다. 

'property var test:XXXX' 이걸 뜻하는 것 같은데 var type을 사용하면 아무래도 속도에 영향을 끼칠 수는 있겠지만 미미한 것 같다. 


• Code structure 

– id 

– property declarations 

– signal declarations 

– JavaScript functions 

– object properties 

– child objects 

– states 

– transitions

QML 은 생긴지 아직 오래된 것이 아니라 그럴듯한 코딩 스타일, 디자인 패턴 등이 정립되지 않았다. 'Code structure'는 QML 객체를 선언할 때 객체를 어떤 순서로 선언할지에 대한 정의이다.

맨처음 id를 정의하고 객체의 기본 property를 선언한다. 

그 다음으로 객체에서 사용할 signal과 JavaScript 함수를 정의한다. 

그 후에 객체에서 사용할 사용자 정의 property( object property )를 선언한다고 하는데 내 경우 property declarations 다음에 사용자 정의 property를 선언한다. 즉 변수는 변수 끼리 모아둔다.

자식 객체를 선언한 후 states와 transitions를 선언하는 순서이다.

내 방식대로 선언한다고 하면 

• Code structure 

– id 

– property declarations 

– object properties 

– signal declarations 

– JavaScript functions 

– child objects 

– states 

– transitions

순서이다.


Javascript design 

• Use “.pragma library” for shared libraries 

• Qt.include can import other Js files 

• Global code runs in limited scope 

– var x = qmlItem.foo // won't work

• JS를 QML에서 라이브러리로 사용할 때는 파일 맨 상단에 '.pragma library' 라고 선언하는게 좋다.( 딱히 선언안해도사용하는데는 아무 문제가 없더라 )


• JS 파일에서 다른 JS파일을 Import할 때는 'import' 키워드가 아니라 'Qt.include("XXXX.js")' 를 사용해야 한다.


• JS는( QML도 마찬가지로 ) 제한된 Scope를 가진다. Global code라고 해서 모든 Scope에서 실행되는 것은 아니다 . (QML Scope는 JS의 Scope에 영향을 받는다. QML Scope에 대해 따로 정리할 계획이다.)

 

• var 타입 변수가 아무리 전지전능해도 QML Item의 property를 할당 할 수는 없다.( 이 경우는 JS 파일안에 선언된 var 타입의 경우이다. JS 파일안에서는 QML 객체를 만들 수가 없기 때문이다. QML 객체 안에서 property로 선언된 var 타입의 property는 가능하다. )


Posted by 생짜
|