2009-09-24 8 views
6

Qt를 사용하고 있으며 다른 모든 파일에서 사용해야하는 객체를 선언해야하는 주된 방법이 있습니다. 다른 파일에서 해당 객체에 어떻게 액세스 할 수 있습니까? (글로벌하게해야합니다.)Qt의 전역 변수, 방법?

저는 iPhone 개발에 익숙하며 applicationDidFinishLaunching 메소드에서 선언 한 객체에 도달 할 수있는 모든 응용 프로그램에 사용할 수있는 appDelegate가 있습니다. Qt에서 어떻게 할 수 있습니까? 모든 장소에서

답변

8

global_objects.hpp

extern int myGlobalInt; 

global_objects.cpp

#include "global_objects.hpp" 

namespace 
{ 
    int myGlobalInt; 
} 

그리고 #include "global_objects.hpp" 당신은 myGlobalInt이 필요합니다.

C++ singleton vs. global static objectInitializing qt resources embedded in static library도 읽어야합니다.

+0

.hpp 파일에서'extern' 키워드를 잊어 버렸습니다. hpp가 포함될 때마다'myGlobalInt'가 시작될 것입니다. – bluebrother

+0

@bluebrother 고마워요, 고침. –

1

일반적으로 객체 지향 프로그래밍에서는 전역 변수를 사용하지 않아야합니다. 귀하의 경우, 메인 클래스의 변수에 정적 액세스 기능을 제공하여 문제를 해결할 수 있습니다. 하지만 이것이 OOP에 다소 반대되는 것을 알고 있어야합니다.

class MainClass 
{ 
    public: 
     static int mySharedValue(void) { return m_mySharedValue; } 
     static void setMySharedValue(int value) { m_mySharedValue = value; } 
    private: 
     static int m_mySharedValue; 
} 

Foo::myOtherClassFunction(void) 
{ 
    // do something 
    int bar = MainClass::mySharedValue(); 
    // do some more 
} 

또한, 당신의 QApplication에서 기본 응용 프로그램을 유도 할 수 있으며, Qt는에 의해 제공되는 qApp 포인터를 통해 주요 개체에 액세스가 액세스 기능을 추가 할 수 있습니다. 또한 C에서 할 수있는 것과 같은 방식으로 전역 변수를 사용할 수 있습니다.하지만 권장하지는 않습니다.

+1

글로벌 객체를 사용하려는 나의 생각은이 객체가 거의 각 위젯에서 필요한 데이터를 보유하고 데이터가 데이터베이스에서 가져 오기 때문입니다. 전역 개체를 사용하지 않으면 개체가 인스턴스화 될 때마다 데이터베이스에 액세스해야합니다. 나는 그것을 한 번 얻는 것이 더 낫다고 생각했다. 잘못된 생각인가? – Martin

2

Qt에는 단 하나의 QApplication 객체를 돌려주는 정적 메소드 인 QApplication :: instance()가있는 싱글 톤 QApplication이 있습니다. 그것은 MainWindow를 들어, (그들은 "전역"라고했다 이전 시대에) 많은 다른 정적 멤버 함수를 가지고, 활성 창 등

http://doc.trolltech.com/4.5/qapplication.html

당신이 당신의 자신을 추가하려는 경우 당신은 그것을 sublass 수 있습니다 정체.