gpt4 book ai didi

c++ - 为什么我的静态指针不可访问

转载 作者:行者123 更新时间:2023-11-28 06:01:32 27 4
gpt4 key购买 nike

我正在 Qt 中制作一个 C++ 应用程序,并希望在调用相应 ui 类的构造函数时加载登录键盘 (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;
}

最佳答案

当您添加 LoggingKeyboard 的静态实例时当布局被销毁时,它会被它删除。

参见 here

Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it.

所以拥有一个QWidget的单例子类并不是一个好主意。如果您真的需要单例属性 - 您可以将必要的功能提取到另一个类(不会子类化 QWidget )并从 LoginKeyboard 使用它.但是,如果您真的不需要它——那么就不要这样做——应该尽可能避免使用单例,因为它们只是全局变量的美化版本,可能会导致各种各样的难以跟踪的错误。

关于c++ - 为什么我的静态指针不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33193204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com