我有一个Qt GUI应用程序,当我转到帮助>时会打开一个对话框关于。但是,如果我去帮助>再一次,弹出另一个对话框。我试图得到它,以便已经打开的关于对话框是唯一可以打开的对话框(即不允许其他关于对话框)。我觉得这应该很简单,但我不断收到分段错误。这是我的代码:
myApp.h
#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
MyApp.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();
}
about.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
about.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
时,它会起作用。但是点击“帮助”&gt;关于(actionAbout_triggered)多次将打开一堆关于窗口。我只想要1.所以我想我会输入一个if语句,如果About对话框已经打开,请不要再创建另一个,而只是将其设置为活动窗口。我遇到了分段错误。我知道这意味着它试图访问不应该存在的内存,但我不知道为什么。
非常感谢任何帮助。
答案 0 :(得分:2)
执行此操作的常规方法是为“关于”窗口设置模式对话框。像这样的东西
void MyApp::on_actionAbout_triggered()
{
About dlg(this);
dlg.exec();
}
特别针对您的问题,问题是您没有将aboutDialog
初始化为MyApp
构造函数中的任何内容,因此它是“未定义的值” - 可能不是null
。
在aboutDialog
构造函数中将MyApp
设置为null以解决您的段错误。