- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 Qt 中的一件事很困惑:
您经常像这样向 QMenu 添加新操作:
menu.addAction(new QAction("this is a menu"));
所以你正在创建一个新对象,但谁在删除它?根据https://qt-project.org/forums/viewthread/25717父对象应该处理这个但是......它总是发生吗?如果我没有在构造函数中放置任何父对象怎么办?如果我自己删除了对象,父对象会在删除已删除的对象时出现 SEGFAULT 吗?
即使是 qt creator 创建的默认代码也在构造函数中创建名为 ui
的对象并在析构函数中删除它。这就是我为自己动态创建的对象所做的,但令人惊讶的是,它从未崩溃过。我只是发现我可能一直不应该自己删除它们?
处理这个问题的正确方法是什么?它是否适用于所有在构造函数中具有指向父对象指针的 QObject?
额外的问题:如果这些对象被父级的析构函数删除,是否意味着如果父级是仅在退出时关闭的应用程序的主窗口,那么所有新对象都会泄漏直到应用程序关闭?
最佳答案
如果你想要一个QObject
被自动删除,你必须指定一个parent。大多数派生类在其一个或多个构造函数参数中提供了这一点。
您在上面创建的 QAction
没有父级,因此当 QMenu
被销毁时它不会被删除。为此,将行更改为:
menu.addAction(new QAction("this is a menu", &menu));
这是不可取的,因为 QAction
是 command pattern 的一个实现因此它旨在用于比 QMenu
更多的地方,因此它的生命周期不能与 QMenu
的生命周期相关联。一个简单的示例是作为 QToolBar
上的按钮。
因此,当您添加 QMenu
时,它不会使自己成为 QAction
的父级。
QObject
的一些其他派生类确实会这样做,因此并不总是需要自己显式分配父级。
一个常见的例子是QMainWindow
。每当您使用 setCentralWidget()
分配一个 QWidget
时,主窗口将获得所有权并强制自己成为新中央小部件的父级,即使您创建了其他对象该小部件的父级。
关于c++ - QActions是如何被删除的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410164/
当我尝试返回值时,我在 smtdplugin 实现文件中遇到了这个错误。好的,我知道我正在创建一个指向 QAction 的指针,当我尝试返回它时,我不能这样做,因为我的方法正在等待对对象的引用。但我不
我刚刚安装了 Mac OS X 10.8.3 和 Qt Creator 3、XCode 和 XCode 命令行工具。我正在尝试编译一个在另一台计算机上运行的项目,但每次我去“全部构建”时,我都会得到
将 QAction* 添加到 QMenu 时,谁负责删除 QAction* 对象?我在 QMenu 或 QAction 的文档中找不到提到的内容。 void MyClass::contextMenuE
我正在开发一个使用语音来模拟某些操作的应用程序:拖放、选择项目、单击按钮等。现在我有一个需要模拟单击或触发的菜单。 for linktype in globals.linkTypes.keys():
我在 QGraphicsView 子类中创建了 QAction 的实例,并将它连接到我在同一个类中的插槽。 QAction *action = new QAction(tr("New"), thi
我正在运行 osx mountain lion (10.8.3),当我运行下面链接中的代码时,我有一个只有一个操作的菜单... https://gist.github.com/Supm4n/8c705
我正在尝试使用 Qt 制作 IHM,我首先制作了一个基本菜单(文件、编辑...)。到目前为止,我的菜单包含"file",然后显示“新建项目、打开项目、退出”。看起来不错,但我的问题是我似乎无法触发这些
我使用 Qt Designer 创建了一个工具,其中有 3 个 QLineEdits,适用于 translateX、translateY 和 translateZ。对于每个 QLineEdit,我创建
我制作了一个带有 QAction 的菜单栏,它被设置为可检查 self.display_features_action = QtGui.QAction("Show Features", parent)
我想在点击动态创建的QAction时执行带参数的插槽,但是在QMenu中创建QAction时无法添加我的变量,默认的triggered()插槽无法传递。 更清楚地说,我想实现这样的事情: connec
我在菜单项上有一个 Qaction,用于删除我的一个 View 中的选定项。这是我创建 Action 的方式: deleteAct = new QAction( tr("Delete Selected
我在 Visual Studio 中使用 Qt。我想在我的应用程序的 menuBar 中添加 Icons。这是我到目前为止所拥有的: QToolBar *View3DToolBar; QAction
我在 Qt 中创建了一个上下文菜单,我需要菜单中的项目以选中/未选中的方式工作,以便每次点击相应项目时切换。如何将此功能添加到 QAction 中,如下所示? 最佳答案 这是手册中的相关部分。 che
我正在开发GIS软件QGIS的插件。我有一个QAction图标,选中后,只要切换其可见性,就会将组中的图层连接到函数。然后,当未选中它时,它应该断开这些功能,但我收到一个错误: Traceback (
在我的项目中,我显示了一个带有多个 QAction 对象的 QMenu。我希望 QAction 图标在用户将鼠标悬停在其上时发生变化。 这是我当前的代码: QPixmap icons(":/icons
我有一个工具栏或者有几个 QAction。我想在选择 QAction 时更改它的颜色,以便用户可以看到所选的操作。 问题是 QAction 不是 QWidget,所以我们不能使用样式表。有没有办法解决
我有一个 QActions 列表,一些被添加到顶级菜单,一些被添加到顶级子菜单。 有没有办法知道每个 Action 的父菜单名称? QAction *act; 我正在尝试 act->parentWid
Qt 中的大多数类都有默认构造函数。许多类采用 QObject* 或 QWidget* 作为构造函数参数,默认值为 nullptr。 QAction 类也有这样一个以QObject* 为参数的构造函数
我需要使用 qt、c++、qtest(在 eclipse 中)自动化 gui 测试我有一个动态创建的菜单,其中包含动态创建的 QAction,我需要从中测试一个“新选项卡”QAction(在菜单内),
现有代码在 QToolbar 中实现了一些 QAction,如图所示。目的是让选中的Qaction的图标闪烁。 因此,根据 Wizard_Step - 一个类成员 - 每次调用此计时器处理程序时,专用
我是一名优秀的程序员,十分优秀!