2013-06-13 4 views
0

3 개의 라이브러리 ITK VTKQt으로 애플리케이션을 만들고 있습니다. 이후 이벤트 루프 및 신호 및 슬롯의 연결에 모든 기능을 원하므로 QMainWindow 정의에서 모든 기능을 정의했습니다. 이제 mainwindow 객체가 커지면서 다른 기능을 위해 다른 클래스를 만들려고했으나 모든 것들이 엉망이되었습니다. main.cpp 모듈화 아이디어가 없습니다. 당신은 프로그램의 구조가 어떻게되어야한다고 제안 할 수 있습니까?QMainWindow의 신 객체를 없애기

답변

3

main.cppQMainWindow을 만들고 표시 한 다음에 app.exec()을 (를) 호출하는 것보다 드문 것이 있습니다.

QMainWindow이 부피가 커지면이 코드를 main.cpp으로 이동하는 대신 다른 일관된 클래스로 구성해야합니다. 이처럼 보이는 코드에

class MainWindow : public QMainWindow 
{ 
public: 
    void doSomething(); 
    void foo1(); 
    void foo2(); 
    void foo3(); 
    void bar1(); 
    void bar2(); 
    void bar3(); 

private: 
    // ... 
} 

: 기본 개념은 다음과 같습니다 코드 변경하는 것입니다

class Foo: 
{ 
public: 
    void doSomething1(); 
    void doSomething2(); 
    void doSomething3(); 

private: 
    // ... 
} 

class Bar: 
{ 
public: 
    void doSomething1(); 
    void doSomething2(); 
    void doSomething3(); 

private: 
    // ... 
} 

class MainWindow : public QMainWindow 
{ 
public: 
    void doSomething(); 

private: 
    Foo foo_; 
    Bar * bar_; 
    // ... 
} 

가 어떻게 MainWindow의 클래스 FooBar과 회원을 선택합니까 당신 이러한 새로운 클래스로의 이전은 귀하의 상황에 따라 다릅니다. 그러나 아이디어는 각 클래스가 "책임"을 갖도록 코드를 현명하게 구성한 다음 MainWindow은 각 작업을이 작업을 담당하는 클래스에 위임 할 수 있습니다. 집에서와 마찬가지로 전기 관리, 수도 관리를위한 배관공 등이 있습니다. 집을 지키는 사람의 책임은 적절한 사람들에게 적절한 일을하도록 전화하는 것입니다. 귀하의 경우, 당신은 아마도 ITK과 관련된 작업을 수행하고, VTK과 관련된 모든 작업을 수행하기를 원할 것입니다. 그리고 부피가 커지면이 클래스들을 세분화하십시오.

+0

내가 벗고 싶다 –

+1

그리고 내 대답은 당신이 그것을 없애 버리는 방법을 설명하는 것입니다, 그렇죠? 두 버전을 비교해 보면,'MainWindow' 클래스가 전에는 훨씬 더 깨끗하다는 것을 알 수 있습니다. ('Foo'와'Bar' 클래스는 다른 파일로 이동할 수 있습니다). 필연적으로, 코드는 어딘가에 위치해야하며, 컴파일러에 의해 발명되지는 않습니다. 당신의 역할은 그것을 쓰기, 읽기, 그리고 유지하기 쉽게 다른 클래스들 (그리고 따라서 파일들)로 구성하는 것입니다. 자세한 내용은 다음을 참조하십시오. http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep#Architecture – Boris

+0

답변은 내가 실제로 한 것입니다. 하지만 그것이 올바른 방법인지 또는 단일 객체에서 전반적인 일들이 발생하지 않는지 확신 할 수 없습니다. 링크에 대해 고마워. –