我正在Qt中創建一個C++應用程序,並且只要我調用相應的ui-class的構造函數就要加載登錄鍵盤(QWidget)。每次切換到我的登錄窗口時都會調用構造函數。當我離開這個窗口時,析構函數被調用並且一切都被銷燬,所以我不會在我的RAM中留下一點點。我想也只是有一個實例的鍵盤(單身人士),然後隱藏()和顯示(),只要需要。爲什麼我的靜態指針不可訪問
當我第一次調用構造函數時,我創建了我的鍵盤實例並將其添加到verticalLayout。這工作正常。但是當我第二次調用構造函數時,例如當我切換到另一個窗口並切換回我的登錄窗口時,我的靜態鍵盤變得無法訪問。這是我的調試器說的...它無法訪問。所以我已經有了我的鍵盤的一個實例,我只是想再次將其添加到我的verticalLayout,我不明白爲什麼我無法訪問它。也許這是靜態變量的一些屬性,我真的不喜歡C++的新特性。因此,這裏是我的代碼
#ifndef LOGINKEYBOARD_H
#define LOGINKEYBOARD_H
#include <QWidget>
namespace Ui
{
class LoginKeyboard;
}
class LoginKeyboard : public QWidget
{
Q_OBJECT
public:
explicit LoginKeyboard(QWidget *parent = 0);
~LoginKeyboard();
static LoginKeyboard * instance()
{
if (!loginKeyboard)
{
loginKeyboard = new LoginKeyboard();
}
return loginKeyboard;
}
private:
Ui::LoginKeyboard *ui;
static LoginKeyboard * loginKeyboard;
private slots:
};
#endif // LOGINKEYBOARD_H
#include "headerFiles/loginkeyboard.h"
#include "ui_loginkeyboard.h"
LoginKeyboard *LoginKeyboard::loginKeyboard = 0;
LoginKeyboard::LoginKeyboard(QWidget *parent) : QWidget(parent), ui(new Ui::LoginKeyboard)
{
ui->setupUi(this);
}
LoginKeyboard::~LoginKeyboard()
{
delete ui;
}
#include "headerFiles/support.h"
#include "ui_support.h"
#include "headerFiles/mainwindow.h"
#include "headerFiles/loginkeyboard.h"
Support::Support(QWidget *parent) : QWidget(parent), ui(new Ui::Support)
{
ui->setupUi(this);
MainWindow::setPreviousPage(MainWindow::widgetStack->first());
ui->verticalLayout->addWidget(LoginKeyboard::instance()); //error when it gets called the 2nd time
}
Support::~Support()
{
delete ui;
}
'ui-> verticalLayout-> addWidget'需要一個分配的指針,這樣當'ui'被銷燬時,它會刪除添加的小部件(您的實例)? – 1201ProgramAlarm