2010-04-08 2 views
0

나는 몇 초마다 직렬 포트에서 일련의 값을 읽은 GUI 기반 응용 프로그램을 작성 중이며 범위를 표시하는 일부 유형의 그래픽 표시기 (QprogressBar를 생각했을 수도 있음)에 값의 대부분을 표시해야합니다. 값. 문자열에서 파싱하는 다른 데이터 중 일부는 날짜 및 오류 코드입니다. 또한 데이터는 계층 적입니다.Qt Model/View 아키텍처가 유용하지 않은 상황입니까?

Qt의 모델/뷰 아키텍처를 사용하고 싶었습니다. 잠시 MVC에 관심이 있었기 때문에 매우 잘 구현 한 방법을 두뇌로 감싸지 않았습니다.

현재로서는 QAbstractItemModel을 서브 클래 싱했으며 모델에서 직렬 포트를 읽고 트리 데이터 구조의 문자열에서 파싱 된 항목을 래핑합니다. 문제없이 QtreeView의 모든 데이터를 볼 수 있습니다.

QAbstractItemView를 하위 클래스 화하여 모든 그래픽 지표와 함께 사용자 정의보기를 빌드하기 시작했습니다. 이것은 내가 붙어있는 곳입니다. 내 사용자 지정 모델을 표시하는 방법을 알고있는 뷰를 디자인하려면 모델의 모든 데이터가 구성되는 방식을 정확하게 파악해야합니다. 모델/뷰의 목적을 무력화하지 않습니까? 모델을 테스트 한 QTreeView는 기본적으로 모델을 Tree 구조의 설정대로 표시하지만 데이터가 모두 같은 유형이 아니기 때문에 모델을 테스트하지 않습니다. 이 아키텍처를 사용해야하는지 여부를 결정하는 요인 인 데이터 유형 또는 사용자에게 표시하려는 방식입니까? 나는 항상 MVC 스타일로 디자인하는 것이 항상 더 좋다고 생각했다.

QWidget을 하위 클래스로 분류 한 다음 직렬 포트에서 읽고 서브 클래스의 모든 하위 위젯 (그래픽 표시기, 레이블 등 ...)을 업데이트하는 것이 좋을 것 같습니다. 본질적으로 모든 것을 하나의 클래스로 수행하십시오.

누구나 내가 누락 된 부분이나 내가 이런 식으로해서는 안되는 이유를 설명 할 수있는이 문제를 이해하고 있습니까? 지금 나는 조금 혼란 스럽다.

도움을 주셔서 감사합니다.

답변

2

** ** - Qt 모델/뷰 아키텍처가 유용하지 않은 상황입니까?
나는 "m는 반드시 말을하려고 - 최종 편집

가 나는 완전히 당신의 질문을 이해하지만 나 해보자 확실하지 않다

먼저, MVC 디스플레이 패턴에 대해 이야기하자이 있습니다.. 패턴은 관심 분야가있는 별도의 (잘하면 테스트 할 수있는) 섹션으로 프로그램을 나눠주는 것입니다.

  1. 이 모델은 데이터를 설명하는 데이터 구조입니다. 일부 통계 데이터가 있습니다. 또한 선물입니다. 모자 모델은 데이터가 사용자에게 어떻게 표시 될지 아무 것도 모릅니다.
  2. 보기는 정보가 사용자에게 제공되는 방식입니다. 데이터가 어떻게 표시되는지 신경 쓰지 않아야합니다. 이 레이어는 모델이 표시 할 데이터를 얻는 방법을 알지 못하는 것이 중요합니다.
  3. 제어 논리는 처음 두 항목을 서로 연결하는 "접착제"입니다. 좋은 사용자 환경을 만들기 위해 모든 "지저분한"정보를 담고있는 레이어입니다. EDIT - QT가 "보기 항목"이라고 부르는 것의 대부분은 컨트롤러 레이어에 넣을 것입니다.

그러나 이렇게하면 모델과 컨트롤러 레이어가 매우 테스트 가능해집니다.

그렇다고해서 많은 포인트가 MVC 패턴과 관련이 없습니다. 데이터를 표시하는 최적의 방법은 무엇인지 논의하는 것 같습니다. 이것은 항상 문제입니다. 앱을 보지 않고도 나는 무엇이 좋게 보이는지 알려주지 않을 것입니다.

좋은 MVC 패턴 디자인을 따르면, 밑줄을 긋는 코드에 영향을주지 않고도 디스플레이를 상당히 획기적으로 수정할 수 있습니다.

이 말은 지금 당장이 정확한 문제를 다루고 있습니다.이 패턴은 잘 형성되고 있습니다. codeplex.com으로 이동하여 mvvm (WPF에서 사용되는 용어 인 model-view-viewmodel)을 검색하면 더 많은 정보를 얻는 데 사용할 수있는 여러 프로젝트를 볼 수 있습니다.

충분하지 않다면 알려 주시면보다 나은 답변을 드릴 수 있습니다.

+0

정말 고마워. 도움이됩니다. 내가 분명히하자. 10 개의 전압, 10 개의 온도, 날짜/시간 및 3 개의 상태 코드가 직렬 포트에서 수신 된 문자열을 구문 분석한다고 가정 해보십시오. 이제는 데이터를 가져 와서 트리, 목록, 테이블 또는 원형 차트에 넣고 싶지 않습니다. 대신 나는 볼트와 템프의 그래픽 표시기, 시간을 표시하는 레이블, 상태 코드의 레이블 및 다른 계산 된 값의 레이블을 갖고 싶습니다. 모델에서 정확히 무엇이 나오는지 알 필요가있는 것처럼 사용자 정의보기처럼 보입니다. 그래서 MVC가 여전히 그 상황에서 유용할까요? 말이 돼? – csmithmaui

+1

예 MVC는 여전히 좋은 패턴입니다. 컨트롤러 레이어는 프레젠테이션을보기 (게이지)하기 위해 판독 값 (모델)을 통합하기 때문에. 모든 복잡한 데이터 조작 논리를 컨트롤러 레이어에 넣으면 단순한 모델 및 뷰 레이어가 남습니다. 그리고 라이브 데이터에 연결할 필요가 없으므로 완전히 테스트 할 수있는 컨트롤러 레이어. 너 시작하면 잔인한 것처럼 보일거야. 그러나 일단 그것을 이해하기 시작하면 실제로 많은 의미가 있습니다. –

+0

쿨 ... 도와 줘서 고마워. 당신의 도움과 많은 독서로 나는 조금 더 잘 이해하기 시작했다고 생각합니다. – csmithmaui

관련 문제