用c ++和qt编写学校项目。它应该是一个块编辑器(如draw.io)。我生成块作为按钮并将它们设置为网格。每个按钮应该有自己的菜单,以便能够进行编辑,删除等。(图像示例:
我们遇到了一个问题,即我们的操作无法连接到插槽。函数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;
}
答案 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
对象)在接收器中存活并且连接断开。