Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何声明全局QWidget?_C++_Qt - Fatal编程技术网

C++ 如何声明全局QWidget?

C++ 如何声明全局QWidget?,c++,qt,C++,Qt,我想有一个扩展QWidget的类,我可以在我的整个程序中访问它。我已经尝试过在main.cpp中声明它(但显然没有在其他文件中声明),或者在类声明之后声明它(在这种情况下,如果我多次包含该文件,我会得到错误多个声明) 小部件是否可以作为全局的,如果可以,如何实现 编辑: 我想做的是在第二个窗口中写入信息,这是类控制台的一个实例(我已经编写了该类) 然后,我有了类main窗口,以及它包含的类;计算和变量小部件,分别包含计算和变量的列表 我希望能够从所有这些类在控制台窗口上进行写操作。我不建议使用它

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

小部件是否可以作为全局的,如果可以,如何实现

编辑:

我想做的是在第二个窗口中写入信息,这是类控制台的一个实例(我已经编写了该类)

然后,我有了类main窗口,以及它包含的类;计算和变量小部件,分别包含计算和变量的列表


我希望能够从所有这些类在控制台窗口上进行写操作。

我不建议使用它,但它比全局指针要好。如果在应用程序中只需要一次窗口(-s),可以使用单例(反)模式

这是SingletonTemplate类

#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__
\ifndef\u csingleton模板__
#定义单个模板__
模板类CSingletonTemplate
{                                                                         
公众:
静态T*GetInstance()
{
如果(m_实例==0)
{
m_实例=新的T();
}
返回m_实例;
}
静态T&GetRefInstance()
{
如果(m_实例==0)
{
m_实例=新的T();
}
返回*m_实例;
}
静态空隙释放()
{
如果(m_实例!=0)
{
删除m_实例;
m_实例=0;
}
}
受保护的:
CSingletonTemplate(){;};//隐藏构造函数
CSingletonTemplate(CSingletonTemplate const&){;};//隐藏副本构造函数
CSingletonTemplate&operator=(CSingletonTemplate常量&){;};//隐藏分配操作
~CSingletonTemplate(){;};//隐藏析构函数
私人:
静态T*m_实例;
};
模板T*CSingletonTemplate::m_实例=0;
#endif/\uu CSingletonTemplate\u H__
您可以通过如下方式声明一个类来使用它:

class MyWindow : public CSingletonTemplate<MyWindow>
{
  friend class CSingletonTemplate<MyWindow>;

private:
  MyWindow();
  virtual ~MyWindow();
  Q_DISABLE_COPY(MyWindow);
};
类MyWindow:公共CSingleton模板
{
好友类CSingleton模板;
私人:
MyWindow();
虚拟~MyWindow();
Q_禁用_复制(MyWindow);
};
您可以使用这个类调用MyWindow::GetInstance()->


有关单例模式的更多信息,请访问:

我说,您可以用在
c++
中声明全局变量的相同方法来执行此操作,但您可能不应该这样做。我知道不建议使用全局变量,但我想从代码中的任何地方访问此小部件上的文字,但我想从代码中的任何地方访问此小部件上的文字
Qt
方法很可能使用信号和插槽。如果您能更好地描述您的代码,我们可以给您更好的建议,或者如果我理解得很好,我们可以给您一个建议,我必须在MainWindow中实例化类控制台(这是我想要访问的控制台)。然后,使用插槽和信号,我只需要将我想写的文本备份到MainWindow中,然后使用Console的函数来写它?