Я делаю приложение C++ в Qt и хочу загрузить клавиатуру входа (QWidget) всякий раз, когда я вызываю конструктор соответствующего ui-класса. Конструктор вызывается каждый раз, когда я переключаюсь в свое окно входа в систему. Когда я покидаю это окно, деструктор вызывается и все уничтожается, поэтому я не оставляю ни одного бита в своей ОЗУ. Я хочу также просто иметь один экземпляр клавиатуры (singleton), а затем скрыть() и показать(), когда это необходимо.Почему мой статический указатель недоступен
Когда я вызываю конструктор в первый раз, я создаю экземпляр моей клавиатуры и добавляю его в свой 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