问题标签 [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.

0 投票
2 回答
495 浏览

c++ - 是否有一个智能指针在其目标在 C++ 中被销毁时自动为空

我找到了 QPointer。还有其他人吗?

0 投票
1 回答
412 浏览

c++ - 是否有针对 boost::bind 的 QPointer 专业化

boost::bind处理boost::shared_ptr方式与原始指针相同。

我希望有一个作为原始指针指针boost::bind处理的。QPointers

有没有人专攻的QPointer

如果不知道从哪里开始或需要专业化什么,那么我可以自己做。

0 投票
1 回答
5829 浏览

qt - QPointer 和删除对象

我有一个 Qt 应用程序,用于QPointers显示新的 UI 对话框(小部件)。主应用程序可以有许多加载不同数据的相同小部件。我遇到的问题是删除和释放每个小部件的内存。如果我监视程序的 RAM 使用情况,每次单击按钮打开这些新小部件之一时,它都会增加 ram,而当我关闭小部件时,它似乎并没有释放 ram。我尝试过使用deleteLater和其他解决方案,但程序中不断出现崩溃。

一些示例代码在这里:

这将调用ListReservations声明为QDialog(非模态)的“”小部件。在那个对话框中,我有一个按钮来关闭调用QWidget::close()插槽的窗口。

我想问题是我的主程序(具有QPointer)如何知道对话框何时关闭然后释放对话框并(如果可能)删除指针以节省更多内存......

我认为您可能可以QConnect()QPointer对象执行操作,但我似乎找不到任何允许指针传递的信号或插槽,更不用说在对话框确实关闭并准备好删除时发送信号了。

也许我需要在主程序中使用某种函数,它需要一个通用指针对象,然后QDialog在调用它自己的关闭槽之前调用它?在那个函数中,它会通过自身被销毁吗?只是抛出我试图实施但失败的想法......

我认为我不能在其他地方重用相同的指针,因为理论上你可以ListReservations同时打开多个窗口。

0 投票
3 回答
940 浏览

c++ - QPointer 可以成为 std::map 的关键吗

根据SGI 关于关联容器的文档,“由于元素是根据其键存储的,因此与每个元素关联的键必须是不可变的”。我有时使用指针作为 std::map 的键,因为尽管指向的对象可能是可变的,但指针本身是恒定的。

QPointer 在技术上是一个模仿指针的对象,Qt 的文档说我们可以像使用指针一样使用 QPointers。由于 QPointer 对象本身在执行过程中可能会发生变化,它仍然可以用作 std::map 容器的键吗?

编辑 1:我不能使用 QMap,我必须坚持使用 std::map。
编辑 2:当我使用 QPointer 时代码编译。问题是我是否应该在运行时期待不愉快的惊喜。

0 投票
1 回答
1962 浏览

c++ - 抽象基类的 QPointer

我正在编写一个表达式解析库。它是用 Qt 编写的,我有一个这样的类结构:
QCExpressionNode- 表达式的所有部分的抽象基类 - 表达式
QCConstantNode中的常量(扩展QCExpressionNode
QCVariableNode- 表达式中的变量(扩展QCExpressionNode
QCBinaryOperatorNode- 二进制加法,减法,乘法,除法和电力运营商(扩展QCExpressionNode

我希望能够使用智能指针(如QPointeror QSharedPointer),但我遇到了以下挑战: -
可以QPointer与抽象类一起使用吗?如果有,请举例说明。
- 如何将 aQPointer转换为具体的子类?

0 投票
2 回答
1412 浏览

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();仍然是错误的吗?

我没有多线程程序的经验。任何帮助表示赞赏。;)

0 投票
2 回答
1262 浏览

c++ - 包含派生对象的 QPointer 不会与基类匹配

对不起,奇怪的标题,如果您能想到一个,请随时提出一个更好的标题。

这是我的问题。

我有一个看起来像这样的结构:

QObject -> MyBase -> MyDerived

然后我有一个函数,它将任何派生类型作为 QPointer;

现在的问题是我不能传递QPointer<MyDerived>给这个函数,如果我使用标准指针的话。我是否必须强制转换此对象以使其适合该功能?还是我应该只使用普通指针?

另外,当您分配失败的对象时,有人知道标准行为吗?您应该总是在 try-block 中执行此操作,还是将其包装在某些东西中以检查它是否为空?我阅读了 Qt 文档,他们说如果分配失败,他们的大多数类都会返回空值。该陈述何时为真,如果我不想使用 try-catch,我该怎么办?

0 投票
1 回答
806 浏览

qt - 指向 QHash 的 QPointer

是否可以将 QPointer 与 QHash 一起使用?

0 投票
1 回答
769 浏览

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

0 投票
2 回答
31914 浏览

c++ - Qt 中的 QPointer、QSharedPointer 和 QWeakPointer 类有什么区别?

我已经阅读了关于QPointer,QSharedPointerQWeakPointerclasses 的 Qt 文档。它说:

  1. QPointer是一个模板类,它提供指向 Qt 对象的受保护指针,其行为类似于普通的 C++ 指针,除了当引用的对象被销毁并且不产生“悬空指针”时它自动设置为 0。

  2. QSharedPointer类持有对共享指针的强引用。

  3. QWeakPointer类持有对共享指针的弱引用。

我的问题是“这些课程有什么区别?”。即指向对象的指针和对指针的引用有什么区别?它们都是指向具有不同机制和行为的对象的指针吗?