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