2009-09-24 83 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オブジェクトが1つだけ戻される静的メソッドQApplication :: instance()がある、シングルトンQApplicationがあります。 それは、メインウィンドウのために、(彼らは「グローバル」と呼ばれていた以前の時代に)他の多くの静的メンバ関数を持っている、アクティブなウィンドウなど

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

あなたがあなた自身を追加したい場合は、それをsublassすることができます静的