0

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

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();
 }
4

1 回答 1

2

问题在这里:

{
    BOBSMainWindow w;
    w.show();
}

w.show()不是阻塞调用。所以你正在创建一个窗口,显示它,然后当它超出范围时它会立即被破坏。您应该声明w为成员变量或在堆上构造它:

BOBSMainWindow *w = new BOBSMainWindow(this);
于 2012-12-28T02:14:00.593 回答