Qt - 打开窗口的单个实例
Qt - Open single instance of a window
如何
检查窗口/对话框是否已打开?我使用此代码打开一个新对话框,但每次单击它时,对话框都会不断打开。显然不是设置对话框的工作方式。
Class *someClass = new Class();
someclass->show();
在代码中,每次都会创建一个新的窗口/小部件/对话框。在其他地方初始化*someClass
,然后只显示它。
class Foo
{
public:
Foo() { someClass = new SomeClass() }
void fooClicked() { someClass->show() }
private:
SomeClass *someClass;
};
在调用类(或主应用程序类或类似类)中,定义指向该类的指针:
dialogclass *someclass;
在该主类的构造函数中,初始化对话框类:
someclass = NULL;
如果要显示对话框,请执行以下操作:
if (!someclass) someclass = new dialogclass(); // Creates a dialog instance if it does not already exist
if (!someclass->isVisible()) someclass->show(); // Only shows the dialog if it is not already shown.
使用 QPointer:
QPointer<MyDialog> dialog = new MyDialog(this);
dialog->show();
...
if (dialog) dialog->show();
如果对话框存在,将显示它。如果在此期间删除它,它将保留 0 而不是无效地址,并且最后一行将永远不会执行 - 它不会显示,但您可以根据需要重新创建它。
您可以在窗口类上创建静态指针。它允许您存储上次打开的窗口对象。
class MyWindow : public QWidget {
public :
static MyWindow* instance;
...
}
每当您创建新实例时,都可以设置 instance
.当实例为 null 时,您可以创建一个新窗口。当您要关闭打开的窗口时,应再次使实例为 null。这允许您只有一个打开的窗口。
if (MyWindow::instance == NULL) {
MyWindow *w = new MyWindow(...);
MyWindow::instance = w;
}
此设计模式称为单例,它允许您每个类只有一个对象。此外,这有点不同,因为在 Singleton 中,构造函数不是公共的,工厂方法应该用于创建对象,但它是相似的。
相关文章:
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 通过单个实例从多个类访问一个类
- 如何在C++中调试单个容器实例的大小
- 传递单个或向量对象时没有重载函数的实例
- Qt - 打开窗口的单个实例
- 如何在崩溃时管理Qt应用程序的单个实例
- C++ 使用单个输入字节文件的不同部分实例化堆栈上的成员类
- 函数的单个实例
- cout 对象是否保持单个实例,即它永远不会被复制
- C++程序的单个实例,使用boost::interprocess
- 许多QPropertyAnimation实例与单个实例相比
- 每个层次结构的单个单一实例继承
- 最大化qt中单个实例应用程序的已运行实例
- Qt new-多个实例或指向单个实例的指针
- 为C++中模板的所有实例生成的单个机器代码实例:它是否可行和/或可能
- 对于单个实例应用程序,只允许使用单个窗口消息框
- 如何按值从vector中删除元素,但只能删除该值的单个实例
- 如何查找给定的应用程序是否为单个实例
- 类的多个实例使用另一个类的单个实例