0

何がいけなかったのかわからないので、ここで質問させてください。以下に定義する BOBSNetworkSessionManager という単純なクラスを作成しました。シグナルとスロットを使用できるように QOBject を継承する単純なクラスですが、ダイアログや関連するウィンドウはありません。最終的にログイン ダイアログが呼び出され、資格情報を使用して、作成した tcp サーバーに接続します。このクラスは、サーバーに接続され、15 分以内に使用された場合にのみ正常に動作するため、プログラムの接続状態を管理する層として機能します。これは pci 準拠のためです。これらの条件が真でない場合、このクラスはウィンドウをロックし、新しいログインを強制します。現時点では、資格情報が渡され、サーバーに接続されているかのように、メインウィンドウを任意に開こうとしています。問題は、メインウィンドウを開くとすぐに消えることです。なぜそれが消えているのか理解できないようです。すべてのファイルを含めました。

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 に答える