2010-01-21 3 views
3

나는 사용자 인터페이스 분야의 신인입니다. 지금 C++ 언어로 작성한 코드 조각을위한 사용자 인터페이스 디자인에 대해 연구하고 있습니다. QT를 사용하여 UI를 만드는 방법을 결정했습니다.UI/로직 분리 - 누구든지 좋은 지식의 소스를 추천 할 수 있습니다.

지금 내가 주로 신경 쓰는 부분은 UI를 논리에서 분리하는 올바른 방법입니다. 내 UI (다른 위젯, 다른 창)의 다른 부분에서 액세스 할 수 있어야 일부 데이터 레이어가 있습니다. 일부 UI 구성 요소는 동시에 데이터를 나타내거나 변경할 수도 있습니다.

싱글 톤으로 데이터 레이어를 나타내고 UI에서이 싱글 톤을 사용해야합니까? 대안은 데이터에 대한 포인터를 각각의 UI 구성 요소로 전송하는 것이고, IMHO는 나쁜 냄새를 맡습니다.

참고로, QList, QVector, QString 및 내 데이터 레이어 (STL + Boost)에서 사용하는 데이터 구조와 같은 UI 관련 데이터 구조간에 가장 적합한 곳은 어디입니까? 어쩌면 중간에 일부 프록시 레이어가 필요합니까?

누구든지 내 책과 관련된 좋은 책, 기사 또는 다른 지식 자료를 추천 해 줄 수 있습니까? 나에게 줄 수있는 아이디어 나 조언도 환영합니다.

감사합니다.

답변

1

Qt는 Model-View 패턴을위한 강력한 메커니즘을 제공합니다.

Qt 문서에 모두 설명되어 있습니다. Model/View Programming.

기본적으로 로직과 UI 간의 링크가 될 자체 Model 클래스를 구현해야합니다.

+0

QT의 올바른 모델/뷰 아키텍처가 잘 설명되어 있습니다. 하지만 제 질문은 좀 더 넓습니다. 제 신청서에 창문과 위젯이 많이 있습니다. 하지만 그들은 같은 모델에 대해서만 다른 견해가 될 수 없다고 생각합니다. 이 위젯은 동일한 데이터 세트로 작동하지만 서로 다른 측면 (부분)에서 작동합니다. 예를 들어 한 위젯은 선택할 제품의 계층 구조를 보여 주며, 다른 위젯은 사용자가 이미 선택한 제품 목록을 보여줍니다. 그래서 기본적으로 다른 모델 세트를 구현해야한다는 것을 의미합니다. 맞습니까? 문제는 이러한 모든 모델을 구성하는 방법에 관한 것입니다. – Lev

+0

AFAIK, 의존적입니다. 여러 뷰에 대해 서로 다른 모델 집합을 구현해야하지만 여러 위젯이 동일한 데이터의 다른 부분을 표시하는 경우 동일한 모델을 사용할 수 있습니다.예를 들어, 디렉토리 구조를 표시하는 위젯과 선택한 파일에 대한 자세한 정보를 표시하는 다른 위젯이있는 경우 동일한 모델이 수행합니다. 두 위젯이 두 개의 서로 다른 데이터를 표시하는 경우 두 모델을 가지고 있어야합니다. 또한 QDataWidgetMapper를 살펴보십시오. –

1

, 어디 에 가장 좋은 장소는 UI 관련 QList, QVector, QString 내가 내 데이터 계층에서 를 사용하는 데이터 구조와 같은 데이터 구조 (STL + 부스트를 번역하다). 어쩌면 중간에 일부 프록시 레이어가 필요합니까?

두 가지 옵션이 있습니다. 데이터 레이어에 함수를 제공하여 Qt 데이터 구조를 반환하거나 Qt UI 위젯 클래스를 STL + Boost 데이터 구조를 취한 자신의 클래스 주위로 포장하여 변환하고 Qt 위젯에 전달할 수 있습니다.

첫 번째 옵션은 구현하기가 더 쉽고 빠르지 만 두 번째 옵션은 데이터 저장 방식과 UI를 구분할 수 있습니다.