问题标签 [qpointer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 是否有一个智能指针在其目标在 C++ 中被销毁时自动为空
我找到了 QPointer。还有其他人吗?
c++ - 是否有针对 boost::bind 的 QPointer 专业化
boost::bind
处理boost::shared_ptr
方式与原始指针相同。
我希望有一个作为原始指针指针boost::bind
处理的。QPointers
有没有人专攻的QPointer
?
如果不知道从哪里开始或需要专业化什么,那么我可以自己做。
qt - QPointer 和删除对象
我有一个 Qt 应用程序,用于QPointers
显示新的 UI 对话框(小部件)。主应用程序可以有许多加载不同数据的相同小部件。我遇到的问题是删除和释放每个小部件的内存。如果我监视程序的 RAM 使用情况,每次单击按钮打开这些新小部件之一时,它都会增加 ram,而当我关闭小部件时,它似乎并没有释放 ram。我尝试过使用deleteLater
和其他解决方案,但程序中不断出现崩溃。
一些示例代码在这里:
这将调用ListReservations
声明为QDialog
(非模态)的“”小部件。在那个对话框中,我有一个按钮来关闭调用QWidget::close()
插槽的窗口。
我想问题是我的主程序(具有QPointer
)如何知道对话框何时关闭然后释放对话框并(如果可能)删除指针以节省更多内存......
我认为您可能可以QConnect()
对QPointer
对象执行操作,但我似乎找不到任何允许指针传递的信号或插槽,更不用说在对话框确实关闭并准备好删除时发送信号了。
也许我需要在主程序中使用某种函数,它需要一个通用指针对象,然后QDialog
在调用它自己的关闭槽之前调用它?在那个函数中,它会通过自身被销毁吗?只是抛出我试图实施但失败的想法......
我认为我不能在其他地方重用相同的指针,因为理论上你可以ListReservations
同时打开多个窗口。
c++ - QPointer 可以成为 std::map 的关键吗
根据SGI 关于关联容器的文档,“由于元素是根据其键存储的,因此与每个元素关联的键必须是不可变的”。我有时使用指针作为 std::map 的键,因为尽管指向的对象可能是可变的,但指针本身是恒定的。
QPointer 在技术上是一个模仿指针的对象,Qt 的文档说我们可以像使用指针一样使用 QPointers。由于 QPointer 对象本身在执行过程中可能会发生变化,它仍然可以用作 std::map 容器的键吗?
编辑 1:我不能使用 QMap,我必须坚持使用 std::map。
编辑 2:当我使用 QPointer 时代码编译。问题是我是否应该在运行时期待不愉快的惊喜。
c++ - 抽象基类的 QPointer
我正在编写一个表达式解析库。它是用 Qt 编写的,我有一个这样的类结构:
QCExpressionNode
- 表达式的所有部分的抽象基类 - 表达式
QCConstantNode
中的常量(扩展QCExpressionNode
)
QCVariableNode
- 表达式中的变量(扩展QCExpressionNode
)
QCBinaryOperatorNode
- 二进制加法,减法,乘法,除法和电力运营商(扩展QCExpressionNode
)
我希望能够使用智能指针(如QPointer
or QSharedPointer
),但我遇到了以下挑战: -
可以QPointer
与抽象类一起使用吗?如果有,请举例说明。
- 如何将 aQPointer
转换为具体的子类?
multithreading - 多线程程序中的 QPointer
根据http://doc.qt.io/qt-5/qpointer.html,QPointer 非常有用。但我发现它在以下情况下可能效率低下:
如果我想显示标签三次或做其他事情,我必须使用
if(label) label->show1();
if(label) label->show2();
if(label) label->show3();
代替
if(label) { label->show1();label->show2();label->show3(); }
只是因为标签可能会在之后的另一个线程中label->show1();
被销毁或label->show2();.
除了三个 if 之外,还有其他漂亮的方法来获得相同的功能吗?
另一个问题是,当标签在 if(label) 之后被销毁时,if(label) label->show1();
仍然是错误的吗?
我没有多线程程序的经验。任何帮助表示赞赏。;)
c++ - 包含派生对象的 QPointer 不会与基类匹配
对不起,奇怪的标题,如果您能想到一个,请随时提出一个更好的标题。
这是我的问题。
我有一个看起来像这样的结构:
QObject -> MyBase -> MyDerived
然后我有一个函数,它将任何派生类型作为 QPointer;
现在的问题是我不能传递QPointer<MyDerived>
给这个函数,如果我使用标准指针的话。我是否必须强制转换此对象以使其适合该功能?还是我应该只使用普通指针?
另外,当您分配失败的对象时,有人知道标准行为吗?您应该总是在 try-block 中执行此操作,还是将其包装在某些东西中以检查它是否为空?我阅读了 Qt 文档,他们说如果分配失败,他们的大多数类都会返回空值。该陈述何时为真,如果我不想使用 try-catch,我该怎么办?
qt - 指向 QHash 的 QPointer
是否可以将 QPointer 与 QHash 一起使用?
qt - 用于访问对象方法的 QPointer
有一个奇怪的问题,QPointer
用于从不同的、不相关的对象访问对象方法。
我准备了一个小例子来更好地解释它。
我创建了两个QWidget
,Widget_A 和 Widget_B 在一个简单的QDialog
。
我需要从 Widget_B 访问 Widget_A 的公共方法:我将 widget_a 指针传递给 widget_b 的方法进行QPointer
赋值。Widget_A 包含一个QLineEdit
我想从 Widget_B 中清除的内容。
问题是当按下 pushButton_B 时 lineEdit_A 没有任何反应。控制台没有显示任何问题,所以最明显的原因是 Widget_B 正在处理不同的 Widget_A 对象,而不是我通过的那个。
我还创建了从 QWidget_A 到 QWidget_B 的连接,因此在编辑 lineEdit_A 时 label_B 文本会相应更改:这有效。
在询问之前,我需要一个QPointer
因为在我的真实项目中 Widget_A 可以被删除。你能解释我错在哪里吗?我应该选择不同的方式吗?谢谢。按照一些片段
小部件_a.h
小部件_a.cpp
小部件_b.h
小部件_b.cpp
对话框.h
对话框.cpp
c++ - Qt 中的 QPointer、QSharedPointer 和 QWeakPointer 类有什么区别?
我已经阅读了关于QPointer
,QSharedPointer
和QWeakPointer
classes 的 Qt 文档。它说:
QPointer
是一个模板类,它提供指向 Qt 对象的受保护指针,其行为类似于普通的 C++ 指针,除了当引用的对象被销毁并且不产生“悬空指针”时它自动设置为 0。QSharedPointer
类持有对共享指针的强引用。QWeakPointer
类持有对共享指针的弱引用。
我的问题是“这些课程有什么区别?”。即指向对象的指针和对指针的引用有什么区别?它们都是指向具有不同机制和行为的对象的指针吗?