我想要一个扩展QWidget的类,可以在我的整个程序中进行访问。我已经尝试过在main.cpp中声明它(但是在其他文件中没有声明过),或者在类声明之后对其进行声明(在这种情况下,如果我多次包含该文件,则会得到错误multiple declaration
)。
该Widget是否有可能是全局的,如果可以,怎么办?
编辑:
我想做的是在第二个窗口中写信息,这是Console类的实例(我已经写了那个类)。
然后,我有了MainWindow类,它包含其中的类; Calculation_widget和variable_widget,分别包含计算和变量列表。
我希望能够从所有这些类中在“控制台”窗口中编写。
答案 0 :(得分:0)
我不建议使用此方法,但是它比全局指针要好。如果您在应用程序中仅需要一次窗口,则可以使用单例(反)模式。
这是SingletonTemplate类。
method greet( ::?CLASS:D : Person $B, $greeting = 'Hello' ) {
self.name ~ ": $greeting, " ~ $B.name ~ '.'
}
通过声明如下的类来使用它:
#ifndef __CSingletonTemplate_H__
#define __CSingletonTemplate_H__
template <class T> class CSingletonTemplate
{
public:
static T* GetInstance()
{
if (m_Instance == 0)
{
m_Instance = new T();
}
return m_Instance;
}
static T& GetRefInstance()
{
if (m_Instance == 0)
{
m_Instance = new T();
}
return *m_Instance;
}
static void Release()
{
if (m_Instance != 0)
{
delete m_Instance;
m_Instance = 0;
}
}
protected:
CSingletonTemplate() { ; }; // Hidden constructor
CSingletonTemplate(CSingletonTemplate const&) { ; }; // Hidden copy constructor
CSingletonTemplate& operator=(CSingletonTemplate const&) { ; }; // Hidden assign operation
~CSingletonTemplate() { ; }; // Hidden destructor
private:
static T* m_Instance;
};
template <class T> T* CSingletonTemplate<T>::m_Instance = 0;
#endif // __CSingletonTemplate_H__
您可以使用此类调用MyWindow :: GetInstance()-> ...
有关单例模式的更多信息,请访问:https://sourcemaking.com/design_patterns/singleton