我是Qt的新手。我有一个奇怪的问题。当我隐藏mainWindow(在应用程序启动时打开)时,我的应用程序将在一段时间后自动关闭。但是,如果我不使用this-> hide()应用程序就可以正常工作。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "aclogin.h"
#include "atm.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_bank_clicked();
void on_pushButton_atm_clicked();
private:
Ui::MainWindow *ui;
aclogin *_login;
atm *_atmEnter;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_bank_clicked()
{
this->hide();
_login = new aclogin(this);
_login->setWindowTitle("Log In");
_login->setModal(true);
_login->show();
}
void MainWindow::on_pushButton_atm_clicked()
{
this->hide();
_atmEnter = new atm(this);
_atmEnter->setWindowTitle("ATM");
_atmEnter->setModal(true);
_atmEnter->show();
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow *_BankSystem = new MainWindow();
_BankSystem->setWindowTitle("Bank System");
_BankSystem->show();
return a.exec();
}
但是,如果我隐藏其他窗口,则应用程序可以正常运行。 谢谢。
分解代码,并添加一个.ui文件。 OP指示的行为是正确的。执行hide()方法后:
主窗口确实隐藏了 该应用程序从码头上消失了 该应用程序从任务管理器中消失 (有趣的是,从Creator的角度来看,该应用程序尚未退出。如果单击“运行”按钮,则会显示“等待应用程序停止”消息。)
/ * mainwindow.h * /
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_bank_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
/ * mainwindow.c * /
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_bank_clicked()
{
this->hide();
}
/ * main.c * /
#include "mainwindow.h"
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow *_BankSystem = new MainWindow();
_BankSystem->show();
return a.exec();
}
这是.ui文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QPushButton" name="atm">
<property name="geometry">
<rect>
<x>80</x>
<y>30</y>
<width>80</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>atm</string>
</property>
</widget>
<widget class="QPushButton" name="bank">
<property name="geometry">
<rect>
<x>230</x>
<y>30</y>
<width>80</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>bank</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
答案 0 :(得分:1)
quitOnLastWindowClosed:布尔 此属性保存在关闭最后一个窗口时是否隐式退出应用程序。
默认值为true。
如果此属性为true,则当最后一个可见的主窗口(即没有父窗口)关闭时,应用程序退出。
访问功能:
bool quitOnLastWindowClosed()
void setQuitOnLastWindowClosed(bool quit)
此外,您在MainWindow *_BankSystem = new MainWindow();
处发生内存泄漏。您可以通过向new MainWindow()
添加父项,删除或智能指针来解决此问题。
答案 1 :(得分:0)
使用QApplication::setQuitOnLastWindowClosed
作为a.setQuitOnLastWindowClosed(false)
可以防止应用程序在最后一个窗口关闭时终止。