我的代码在 Qt 中的调试模式下工作时不能在发布模式下工作

My code does not work on Release mode while works on Debug mode in Qt

我有 signal/slot 代码。我希望另一个 class 上的功能在切换复选框时起作用。我写了下面的代码。 Signal/Slot 在调试模式下工作正常。但是,它不适用于发布模式。

我也希望我的程序能够动态运行。我不需要打开一个新的 window.

这是我的代码。先感谢您。

preferences.cpp

Projects *projects;
// projects = new Projects; // I dont want to create new one. I just want to make changes on the existing Mainwindow (Projects class)

connect(ui->checkBox_toolbar, SIGNAL(toggled(bool)), projects, SLOT(hide_toolbar(bool)));
connect(ui->checkBox_button, SIGNAL(toggled(bool)), projects, SLOT(hide_buttons(bool)));

projects.cpp

void Projects::hide_toolbar(bool checked)
{
    ui->toolBar->setVisible(checked);
}

我收到警告:'projects' 可能未初始化地用于此函数 [-Wmaybe-uninitialized] connect(ui->checkBox_toolbar, SIGNAL(切换(bool)),项目,SLOT(hide_toolbar(bool)));

和错误:"QObject::connect: Cannot connect QCheckBox::toggled(bool) to (null)::hide_toolbar(bool)"

警告会告诉您到底出了什么问题。 projects 指针变量未初始化。它不指向有效的 Projects 对象。你不能那样使用它,那是未定义的行为。它似乎在调试模式下工作纯属巧合。

您注释掉的代码说明了有关现有主要 window 的一些信息。如果你想连接到那个 main window 的一个插槽,你需要先得到一个指向那个 main window 对象的指针。然后就可以连接了。

谢谢大家的关注。

我用以下代码处理:

Projects *projects = qobject_cast<Projects *>(parent);