为什么我的主窗口在从其他类调用时会自动关闭?

时间:2012-12-28 01:53:27

标签: qt qmainwindow

我似乎无法弄清楚出了什么问题,所以我来这里问你。我在下面定义了一个名为BOBSNetworkSessionManager的简单类。它是一个继承QOBject的简单类,因此我可以使用信号和插槽,但它没有对话框或与之关联的任何窗口。它最终将调用登录对话框并使用凭据连接到我创建的tcp服务器。此类用作管理程序连接状态的层,因为它只在连接到服务器时才能正常运行,并且在15分钟内使用时不会因p.c.i而中断。合规性。如果这些条件不成立,则此类将锁定窗口并强制重新登录。截至目前,我只是试图随意打开主窗口,好像凭证已经通过,我已经连接到服务器。问题是,当我打开主窗口时,它会立即消失。我似乎无法弄清楚为什么它会变暗。我已经包含了所有文件。

BOBSDCNetworkSessionManager .h头文件

#ifndef BOBSDCNETWORKSESSIONMANAGER_H
#define BOBSDCNETWORKSESSIONMANAGER_H

#include <QObject>
#include <QSettings>

class BOBSDCNetworkSessionManager : public QObject
{
    Q_OBJECT
public:
    explicit BOBSDCNetworkSessionManager(QObject *parent = 0);

protected:
    void destroyed(QObject *);

signals:

public slots:

private:
void readSettings();
void writeSettings();
QSettings networkSettings;

};

#endif // BOBSDCNETWORKSESSIONMANAGER_H

BOBSDCNetworkSessionManager实现.cpp文件

#include "bobsdcnetworksessionmanager.h"
#include "bobsmainwindow.h"

 BOBSDCNetworkSessionManager::BOBSDCNetworkSessionManager(QObject *parent) :
    QObject(parent)
{
    BOBSMainWindow w;
    w.show();
}

Main.cpp文件

#include "bobsdcnetworksessionmanager.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setApplicationName("Enterprise Management Suite");
    a.setApplicationVersion("Beta Version: 0.0.0.01");
    a.setOrganizationName("Enigma Web Consulting");
    a.setOrganizationDomain("http://www.EnigmaWebCo.com");

    BOBSDCNetworkSessionManager netMgr;

    return a.exec();
 }

1 个答案:

答案 0 :(得分:1)

问题在于:

{
    BOBSMainWindow w;
    w.show();
}

w.show()不是阻止通话。因此,您正在创建一个窗口,显示它,然后当它超出范围时立即被破坏。您应该将w声明为成员变量或在堆上构造它:

BOBSMainWindow *w = new BOBSMainWindow(this);