我是一名新手在Qt中。我遇到了一个奇怪的问题。当我隐藏我的主窗口(它会在应用程序启动时打开)之后,我的应用程序会自动关闭一段时间。但是如果我不使用这个->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文件。原帖中所示的行为是正确的。在执行hide()方法时:
主窗口确实会隐藏 应用程序从dock中消失 应用程序从任务管理器中消失 (有趣的是,从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();
}
/* 主函数.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>