我正在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