如何声明全局QWidget?

时间:2020-01-23 18:22:54

标签: c++ qt

我想要一个扩展QWidget的类,可以在我的整个程序中进行访问。我已经尝试过在main.cpp中声明它(但是在其他文件中没有声明过),或者在类声明之后对其进行声明(在这种情况下,如果我多次包含该文件,则会得到错误multiple declaration)。

该Widget是否有可能是全局的,如果可以,怎么办?

编辑:

我想做的是在第二个窗口中写信息,这是Console类的实例(我已经写了那个类)。

然后,我有了MainWindow类,它包含其中的类; Calculation_widget和variable_widget,分别包含计算和变量列表。

我希望能够从所有这些类中在“控制台”窗口中编写。

1 个答案:

答案 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

相关问题