Я бы предложил возможное объяснение: вы помещаете экземпляр BlockItem
в стек, и он выходит из области видимости где-то в вашем коде, и, следовательно, уничтожается, в то время как кнопка, меню и действие выживают, поскольку они инстанцированы с new
, таким образом они живут в куче.
Примерно так:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
BlockItem blockitem;
blockitem.createButton();
ui->gridLayout->addWidget(blockitem.getButton());
}
В приведенном выше примере кода blockitem
выходит из области видимости в конце метода, поэтому он разрушается и соединение теряет свою принимающую сторону (т.е. разрывается).
То же самое произойдет, если вы создадите экземпляр BlockItem
объекта в куче, используя new
, но случайно удалите его где-нибудь. И снова отправитель сигнала (объект QAction
) остается в живых, и соединение разрывается.