Qt操作不会连接到插槽

时间:2018-05-03 08:14:18

标签: c++ qt

用c ++和qt编写学校项目。它应该是一个块编辑器(如draw.io)。我生成块作为按钮并将它们设置为网格。每个按钮应该有自己的菜单,以便能够进行编辑,删除等。(图像示例:

enter image description here

我们遇到了一个问题,即我们的操作无法连接到插槽。函数akceAkce只能在输出上打印1(通过qInfo)。但是当我点击菜单按钮时,它什么也没做。任何建议赞赏。谢谢!

div[class^="ms-cui-cg- .ms-cui-ct-first>.ms-cui-tt-a"],
div[class^="ms-cui-cg- .ms-cui-ct-first>.ms-cui-tt-a:hover"] {
  border-left-color: #000;
}

1 个答案:

答案 0 :(得分:0)

我建议一个可能的解释:你把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对象)在接收器中存活并且连接断开。