问题标签 [qsharedpointer]

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 回答
648 浏览

c++ - QSharedPointer 不返回 false

我目前有这样的东西

此共享指针用作

现在如果我关闭QMainWindow然后下面的代码使应用程序崩溃

我的问题是当我关闭cV QMainWindow对象时(通过单击 x 按钮)为什么以下语句返回 true

false如果窗口已关闭,我怎样才能让它返回?

0 投票
1 回答
183 浏览

c++ - 为什么QSharedPointer类中没有重载运算符T*()

但是,类QSharedDataPointer有它。

我总是必须定义一个Class::pointer typedef缩写并创建一个指针Class::pointer(new Class)

有谁知道这其中的原因?

0 投票
2 回答
357 浏览

c++ - Qt 相当于 boost::ptr_vector?

我需要一个指针容器来获得指针的所有权——即当一个元素被删除,或者容器超出范围时,它会释放它的所有指针,比如在boost::ptr_vector.

QList<QScopedPointer<AbstractClass> >不起作用(编译错误,没有复制构造函数?)。

现在我正在使用QList<QSharedPointer<AbstractClass> >,但感觉有点矫枉过正,因为它的引用计数和用于多线程的昂贵互斥锁。

编辑:我刚刚了解了QPtrList(感谢@ForEveR),它在 Qt3 中非常等价,但已从更高版本中删除。我只是不明白他们为什么要删除它。

0 投票
1 回答
336 浏览

c++ - C++ 中的对象创建和成员声明

我来自一个Java背景,我最近开始Qt学习C++. 在进行一些编码时,我对对象创建和成员声明产生了一些疑问:

假设我有一个声明如下的类:

类A.h:

A类.cpp

声明的标头中发生了什么MyObject myObj;?是否使用不带参数的构造函数MyObject在堆栈中创建类型的对象并将其分配给变量?myObj或者只声明了一个准备存储MyObject对象的空变量?

我如何将在ClassA.cpp堆栈中创建的新对象分配给myObj变量?

declareArray是在堆中创建的 s 数组int,我应该添加带有 a 的析构函数delete declaredArray;以避免内存泄漏吗?

声明的标头中发生了什么QSharedPointer<MyObject> obj;?是否MyObject创建了一个空指针?ClassA.cpp( )中的赋值obj = QSharedPointer<MyObject>(new MyObject, doDeleteLater);是否正确?

0 投票
1 回答
1437 浏览

c++ - 在 QSharedPointers 中管理 QAbstractItemModel 数据

在 c++ Qt 中,我喜欢使用QSharedPointers管理我的堆内存,但是可以/应该使用它们来管理QAbstractItemModel中的数据吗?

例如,可以有一个 QStrings 列表QList<QSharedPointer<QString> > queue

问题是,当实现 a 时QSharedAbstractItemModelQAbstractListModel您需要处理原始指针。例如,方法index返回一个QModelIndex,它在构造函数中接受一个 void 指针,指向堆上的那些 QString 之一。一旦您创建了该对象,您就可以使用托管和非托管的堆内存。

因此,如果我将所选项目存储在指针中的某个位置,然后清除我的模型,则指向该指针的数据将被删除。

那么如何处理要放入的堆内存对象QAbstractItemModel

我使用 qt 5.1。

0 投票
0 回答
682 浏览

c++ - Qt 信号:取消引用 QSharedPointer

我有一个Historymanager 类,它有一个QUndoStack 类型的属性。我可以使用返回的 getter 来获取 undoStack

现在在另一个 C 类中,我可以访问历史管理器,并且需要将信号 canRedoChanged(bool) 连接到该类中的方法。问题是:我如何告诉发送方的连接方法?

我试过了:

但这并不能解决问题。我也试过

通过在前面加上“*”来取消引用 historyManager->getQUndoStack().data(),但这会产生编译错误。

现在 Qt 一直告诉我没有信号 canRedoChanged,尽管 quundostack.h 确实提供了它。connect 方法要求第一个参数是

我需要在这里做什么?

0 投票
2 回答
5790 浏览

c++ - 将信号和槽附加到 QSharedPointer 中的对象

我的应用程序包含几个这样的功能:

为了避免传递原始指针,我将所有出现的DataProvider *to都更改了QSharedPointer<DataProvider>。后者几乎是前者的替代品,只是您不能将 QSharedPointer 传递给QObject::connect. 我通过从 QSharedPointer 中提取一个原始指针来解决这个问题:

这似乎工作正常,但看起来不优雅,我对像这样访问原始指针持谨慎态度。有没有更好的方法连接到 QSharedPointer 中传递的对象?

0 投票
1 回答
3014 浏览

c++ - Qt 的 PointerToMemberFunction 定义在哪里?

这个问题中,我能够调整QObject方法

变成接受 aQSharedPointer而不是 aQObject*作为其第一个参数的变体:

我想对采用函数指针的版本做同样的事情,

但我无法弄清楚PointerToMemberFunction它是什么或定义在哪里!这是什么类型?

0 投票
2 回答
1529 浏览

c++ - 返回 QList 的函数

我有以下课程

这是正确的使用方法QList吗?我应该使用QSharedPointer而不是原始指针来避免内存泄漏吗?请给我一些建议。

0 投票
2 回答
166 浏览

c++ - 仅在 Qt API 中使用普通指针

我已经使用 Qt 有几天了,我想知道为什么他们所有的 API 都使用普通指针而不是他们自己的智能指针,例如QSharedPointer.

使用它们不是更一致吗?