在 Qt5.15 之前的版本中,Qt::make_shared 用于创建 QSharedPointer。 std::shared_ptr 和 QSharedPointer: 这两个类模板都实现了共享所有权的智能指针,它们通过引用计数来管理对象的生命周期。 命名空间和使用场景: 命名空间确实不同,std::shared_ptr 位于 std 命名空间中,而 QSharedPointer 位于 Qt 的命名空间中。 std::shared_ptr 和 QSharedPointer 在功能上相似,但它们分别属于不同的库,并且在某些特定场景下可能更适合使用其中一个。 在 Qt 应用程序中,通常推荐使用 QSharedPointer,因为它可能更好地与 Qt 的其他特性集成。
例如,可以创建一个自定义的包装类 UniqueConcatWrapper,如下所示: struct UniqueConcatWrapper { QSharedPointer<Contact> ptr ; UniqueConcatWrapper(QSharedPointer<Contact> ptr) : ptr(ptr) {} }; class ContactView : public QListView { QList<UniqueConcatWrapper> m_contacts; }; m_contacts.emplace_back(QSharedPointer<Contact>(new (QSharedPointer<Contact>(new Contact("", ""))); m_contacts.emplace_back(QSharedPointer<Contact>(new Contact ("", ""))); m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
/ctk plugin ctkPluginFrameworkFactory* ctkFrameWorkFactory = new ctkPluginFrameworkFactory; QSharedPointer } //install plugin ctkPluginContext* pluginContext = framework->getPluginContext(); QSharedPointer
QSharedPointer QSharedArrayPointer 与 std::shared_ptr QSharedPointer 与 std::shared_ptr 行为最接近原始指针,是最像指针的 QWeakPointer 与 std::weak_ptr 强引用类型的QSharedPointer已经非常好用,为什么还要有弱引用的 QWeakPointer? QWeakPointer 是为配合 QSharedPointer 而引入的一种智能指针,它更像是 QSharedPointer 的一个助手(因为它不具有普通指针的行为,没有重载operator*和->) 它的最大作用在于协助 QSharedPointer 工作,像一个旁观者一样来观测资源的使用情况。 weak_ptr 主要是为了避免强引用形成环状。 它可以作为QPointer的替代品 这种情况下,不需要QSharedPointer的存在 5.
a.setApplicationName("ctkExample");//给框架创建名称,Linux下没有这步会报错 ctkPluginFrameworkFactory factory;//插件工厂类 QSharedPointer 其中QSharedPointer<ctkPluginFramework> framework这个对象比较有意思,既可以作为对象也可以作为对象指针,但要作为插件框架使用必须要用指针方法调用,所以代码里使用
MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_Plot = QSharedPointer >axis(QCPAxis::atBottom, 0)->setPadding(10); // add some padding to have space for tags m_TraserX = QSharedPointer m_TraserX->setText(QString::number(x, 'f', 2)); for(int i=0;i<m_Graph.size();i++) { double y = 0; QSharedPointer
在上面的例子中,可以改为代码: void test() { QSharedPointer<BBE> n(new BBE); n->X = 10; n->Y = 20; n
QString::number(i,10); labels << QString::asprintf("label%1").arg(i); count += 1; } } //共享指针,坐标轴设置 QSharedPointer 2 <<3 <<4 <<5 <<6 <<7; labels<< "USA" << "Japan" <<"Germany" <<"France" <<"UK"<<"Italia"<<"Canada"; QSharedPointer 2 <<3 <<4 <<5 <<6 <<7; labels<< "USA" << "Japan" <<"Germany" <<"France" <<"UK"<<"Italia"<<"Canada"; QSharedPointer 2 <<3 <<4 <<5 <<6 <<7; labels<< "USA" << "Japan" <<"Germany" <<"France" <<"UK"<<"Italia"<<"Canada"; QSharedPointer MMMM\nyyyy"); customPlot->xAxis->setTicker(dateTicker); //configure left axis text label: QSharedPointer
*argv[]) { QCoreApplication a(argc, argv); ctkPluginFrameworkFactory frameworkFactory; QSharedPointer pluginContext = framework->getPluginContext(); // 安装启动插件appinfo try { // 安装插件 QSharedPointer plugin: ") << e.what(); return -2; } // 安装启动插件sysinfo try { // 安装插件 QSharedPointer
03、QSharedPointer>>>QSharedPointer 是 Qt 框架中提供的一个智能指针类,用于管理动态分配的对象。在 C++ 中,使用智能指针可以避免内存泄漏和资源管理问题。 QSharedPointer 实现了引用计数,当最后一个引用被销毁时,所管理的对象会被自动删除。 MAINWINDOW_H // 定义 MAINWINDOW_H,避免重复包含#include <QMainWindow> // 包含 QMainWindow 头文件,用于创建主窗口#include <QSharedPointer > // 包含 QSharedPointer 头文件,用于使用共享指针#include <QList> // 包含 QList 头文件,用于使用 QList 容器QT_BEGIN_NAMESPACE 启动新连接的私有函数声明 Ui::MainWindow *ui = nullptr; // 指向 Ui::MainWindow 的指针,初始化为 nullptr using AssocPtr = QSharedPointer
其他类型 智能指针:如QSharedPointer、QWeakPointer等。 函数指针:可以传递函数指针作为信号和槽的参数。 总之,Qt的信号和槽机制非常灵活,支持多种数据格式的传递。
再来深入描述) -QPointer 头文件<QPointer> 当其指向的对象被销毁时,他会被自动置空(避免被多次释放和野指针) 缺点在于,该模板类析构时,不会自动摧毁所指向的对象(需要手工delete) -QSharedPointer 头文件<QSharedPointer> 带有引用计数机制,支持多个指针对象指向同一片内存(实现共享) 可以被自由地拷贝和赋值 当引用计数为0(最后一个指针被摧毁)时,才删除指向的对象(和shared_ptr
*argv[]) { QCoreApplication a(argc, argv); ctkPluginFrameworkFactory frameworkFactory; QSharedPointer ctkPluginContext* pluginContext = framework->getPluginContext(); try { // 安装插件 QSharedPointer
; customPlot->yAxis2->setRange(-70, 35); // set pi ticks on top axis: customPlot->xAxis2->setTicker(QSharedPointer customPlot->graph()->data()->set(timeData); } // configure bottom axis to show date instead of number: QSharedPointer MMMM\nyyyy"); customPlot->xAxis->setTicker(dateTicker); // configure left axis text labels: QSharedPointer : void MainWindow::addNewData() { QSharedPointer< QCPGraphDataContainer > dataContainer; dataContainer setDateTimeFormat("hh:mm:ss"); ui->customplot->xAxis->setDateTimeSpec(Qt::LocalTime); 2.0版本中设置时间轴 //设置X轴时间刻度 QSharedPointer
其中QSharedPointer framework这个对象比较有意思,既可以作为对象也可以作为对象指针,但要作为插件框架使用必须要用指针方法调用,所以代码里使用“->”。 dir += "/plugins/HelloCTK.dll"; qDebug() << dir; QUrl url = QUrl::fromLocalFile(dir); QSharedPointer event.isNull()) { QSharedPointer<ctkPlugin> plugin = event.getPlugin(); qDebug() << " event.isNull()) { QSharedPointer<ctkPlugin> plugin = event.getPlugin(); qDebug() << " event.isNull()) { ctkServiceReference ref = event.getServiceReference(); QSharedPointer
MMMM\nyyyy"); customPlot->xAxis->setTicker(dateTicker); // configure left axis text labels: QSharedPointer setScaleType(QCPAxis::stLogarithmic); customPlot->yAxis2->setScaleType(QCPAxis::stLogarithmic); QSharedPointer << 6 << 7; labels << "USA" << "Japan" << "Germany" << "France" << "UK" << "Italy" << "Canada"; QSharedPointer (false); customPlot->xAxis->setTickLength(0, 4); customPlot->xAxis->setTickLabelRotation(20); QSharedPointer subBars->rescaleAxes(); // setup a ticker for subBars key axis that only gives integer ticks: QSharedPointer
如代码: #include <QCoreApplication> #include <QDebug> #include <QSharedPointer> int func2(int i) { i
内存管理优化:避免内存泄漏: 使用 QT 的智能指针(如 QSharedPointer、QScopedPointer)管理对象,避免手动释放内存。
2.内存管理优化2.1避免内存泄漏使用智能指针:使用 QSharedPointer 或 QScopedPointer 管理动态内存,避免手动释放内存。检查对象树:确保父对象析构时子对象被正确释放。
高效的内存管理:支持智能指针(如 QSharedPointer、QScopedPointer)。1.2Qt GUI功能:提供基础的 GUI 功能,如窗口管理、绘图、字体、图像处理等。