我的代码在Qt中的Debug模式下无法在Release模式下工作

时间:2019-07-12 13:38:15

标签: c++ qt qt5 signals-slots

我有信号/插槽代码。当复选框处于切换状态时,我希望另一个类上的函数起作用。我写了下面的代码。信号/插槽在调试模式下正常工作。但是,它在发布模式下不起作用。

我也希望我的程序能够动态工作。我不需要打开新窗口。

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

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(toggled(bool)),项目,SLOT(hide_toolbar(bool) ));

错误:“ QObject :: connect:无法将QCheckBox :: toggled(bool)连接到(null):: hide_toolbar(bool)”

2 个答案:

答案 0 :(得分:0)

警告会告诉您确切的问题。 projects指针变量未初始化。它没有指向有效的Projects对象。您不能那样使用,这是不确定的行为。看来它在调试模式下可以正常工作。

您注释掉的代码说明了现有主窗口的某些内容。如果要连接到该主窗口的插槽,则需要首先获取指向该主窗口对象的指针。然后即可连接。

答案 1 :(得分:0)

谢谢大家的关注。

我用以下代码处理了

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