问题标签 [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.
c++ - QSharedPointer 不返回 false
我目前有这样的东西
此共享指针用作
现在如果我关闭QMainWindow
然后下面的代码使应用程序崩溃
我的问题是当我关闭cV
QMainWindow
对象时(通过单击 x 按钮)为什么以下语句返回 true
false
如果窗口已关闭,我怎样才能让它返回?
c++ - 为什么QSharedPointer类中没有重载运算符T*()
但是,类QSharedDataPointer
有它。
我总是必须定义一个Class::pointer
typedef
缩写并创建一个指针Class::pointer(new Class)
。
有谁知道这其中的原因?
c++ - Qt 相当于 boost::ptr_vector?
我需要一个指针容器来获得指针的所有权——即当一个元素被删除,或者容器超出范围时,它会释放它的所有指针,比如在boost::ptr_vector
.
QList<QScopedPointer<AbstractClass> >
不起作用(编译错误,没有复制构造函数?)。
现在我正在使用QList<QSharedPointer<AbstractClass> >
,但感觉有点矫枉过正,因为它的引用计数和用于多线程的昂贵互斥锁。
编辑:我刚刚了解了QPtrList(感谢@ForEveR),它在 Qt3 中非常等价,但已从更高版本中删除。我只是不明白他们为什么要删除它。
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);
是否正确?
c++ - 在 QSharedPointers 中管理 QAbstractItemModel 数据
在 c++ Qt 中,我喜欢使用QSharedPointers管理我的堆内存,但是可以/应该使用它们来管理QAbstractItemModel中的数据吗?
例如,可以有一个 QStrings 列表QList<QSharedPointer<QString> > queue
。
问题是,当实现 a 时QSharedAbstractItemModel
,QAbstractListModel
您需要处理原始指针。例如,方法index返回一个QModelIndex,它在构造函数中接受一个 void 指针,指向堆上的那些 QString 之一。一旦您创建了该对象,您就可以使用托管和非托管的堆内存。
因此,如果我将所选项目存储在指针中的某个位置,然后清除我的模型,则指向该指针的数据将被删除。
那么如何处理要放入的堆内存对象QAbstractItemModel
我使用 qt 5.1。
c++ - Qt 信号:取消引用 QSharedPointer
我有一个Historymanager 类,它有一个QUndoStack 类型的属性。我可以使用返回的 getter 来获取 undoStack
现在在另一个 C 类中,我可以访问历史管理器,并且需要将信号 canRedoChanged(bool) 连接到该类中的方法。问题是:我如何告诉发送方的连接方法?
我试过了:
但这并不能解决问题。我也试过
通过在前面加上“*”来取消引用 historyManager->getQUndoStack().data(),但这会产生编译错误。
现在 Qt 一直告诉我没有信号 canRedoChanged,尽管 quundostack.h 确实提供了它。connect 方法要求第一个参数是
我需要在这里做什么?
c++ - 将信号和槽附加到 QSharedPointer 中的对象
我的应用程序包含几个这样的功能:
为了避免传递原始指针,我将所有出现的DataProvider *
to都更改了QSharedPointer<DataProvider>
。后者几乎是前者的替代品,只是您不能将 QSharedPointer 传递给QObject::connect
. 我通过从 QSharedPointer 中提取一个原始指针来解决这个问题:
这似乎工作正常,但看起来不优雅,我对像这样访问原始指针持谨慎态度。有没有更好的方法连接到 QSharedPointer 中传递的对象?
c++ - Qt 的 PointerToMemberFunction 定义在哪里?
在这个问题中,我能够调整QObject
方法
变成接受 aQSharedPointer
而不是 aQObject*
作为其第一个参数的变体:
我想对采用函数指针的版本做同样的事情,
但我无法弄清楚PointerToMemberFunction
它是什么或定义在哪里!这是什么类型?
c++ - 返回 QList 的函数
我有以下课程
这是正确的使用方法QList
吗?我应该使用QSharedPointer
而不是原始指针来避免内存泄漏吗?请给我一些建议。
c++ - 仅在 Qt API 中使用普通指针
我已经使用 Qt 有几天了,我想知道为什么他们所有的 API 都使用普通指针而不是他们自己的智能指针,例如QSharedPointer
.
使用它们不是更一致吗?