将 QDialog 窗口限制为一个实例 [Qt]
Restrict QDialog window to one instance [Qt]?
我有一个Qt GUI应用程序,当我转到"关于帮助"时,它会打开一个对话框>。但是,如果我再次转到"帮助>关于",则会弹出另一个对话框。我正在尝试获取它,以便已经打开的"关于"对话框是唯一可以打开的对话框(即不允许使用其他"关于"对话框(。我觉得这应该很简单,但我不断遇到分段错误。这是我的代码:
我的应用程式
#ifndef MYAPP_H
#define MYAPP_H
#include <QMainWindow>
#include "about.h"
namespace Ui {
class MyApp;
}
class MyApp : public QMainWindow // inherit all public parts of QMainWindow
{
Q_OBJECT
public:
explicit MyApp(QWidget* parent = 0);
~MyApp();
private slots:
void on_actionAbout_triggered();
private:
Ui::MyApp* ui;
About* aboutDialog;
};
#endif // MYAPP_H
我的应用.cpp
#include "MyApp.h"
#include "ui_MyApp.h"
#include "about.h"
MyApp::MyApp(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::MyApp)
{
ui->setupUi(this);
}
MyApp::~MyApp()
{
delete ui;
}
void MyApp::on_actionAbout_triggered()
{
if (!aboutDialog) {
aboutDialog = new About(this); // create new window
}
aboutDialog->show();
aboutDialog->activateWindow();
}
关于.h
#ifndef ABOUT_H
#define ABOUT_H
#include <QDialog>
namespace Ui {
class About;
}
class About : public QDialog
{
Q_OBJECT
public:
explicit About(QWidget* parent = 0);
~About();
private:
Ui::About* ui;
};
#endif // ABOUT_H
关于.cpp
#include "about.h"
#include "ui_about.h"
About::About(QWidget* parent) :
QDialog(parent),
ui(new Ui::About)
{
ui->setupUi(this);
}
About::~About()
{
delete ui;
}
在MyApp.cpp
,当我摆脱if
时,它起作用了。但是多次单击"帮助">"关于"(actionAbout_triggered(将打开一堆"关于"窗口。我只想要 1。所以我想我会放一个 if 语句,说如果"关于"对话框已经打开,请不要创建另一个对话框,而只是将其设置为活动窗口。我遇到了分段错误。我知道这意味着它试图在不应该访问的地方访问内存,但我不知道为什么。
任何帮助将不胜感激。
执行此操作的正常方法是为"关于"窗口设置一个模式对话框。像这样的东西
void MyApp::on_actionAbout_triggered()
{
About dlg(this);
dlg.exec();
}
具体到您的问题,问题是您没有将aboutDialog
初始化为 MyApp
构造函数中的任何内容,因此它是"未定义的值" - 可能不是null
。
在 MyApp
构造函数中将 aboutDialog
设置为 null 以解决段错误。
相关文章:
- 如何将模板的实例传递给另一个模板的另一个实例?
- 在类的第一个/最后一个实例存在之前/之后调用一对函数.有没有更好的方法?
- 是否可以为所有子类设置一个实例?
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何一次创建帧的一个实例
- 无法从派生类型的作用域访问另一个实例的受保护成员
- QT Windows GUI-无需qtSingLeaplication即可如何打开一个实例
- 包含另一个实例的特征实例,该实例持有固定大小的特征对象
- 从模板类的另一个实例创建模板类的实例时省略模板参数
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 对成员变量的引用在向同一向量中添加另一个实例后断开
- std :: unordered_set :: find-仅构造一个实例()
- 是否可以在 std::optional 中放置一个实例,而不检查/破坏前一个实例?
- 从字符串中删除字符的第一个和最后一个实例
- Object 创建另一个实例,而不是修改指向的实例
- 在#define宏中创建一个实例
- C++-为任何lambda创建一个实例化桶
- qnetworkAccessManager一个实例并连接插槽
- C 是否有办法仅返回for循环的最后一个实例
- 为什么我的程序有一个实例,其中"Vector Subscript out of Range"?