我在使用Qt智能指针时遇到问题。我无法弄清楚这种奇怪行为的原因是什么。 简单设置: 我创建了一个新的Qt Widgets应用程序并将QGraphicsView拖到主窗口中,并且只添加了以下代码来绘制圆圈:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QGraphicsScene"
#include "QGraphicsEllipseItem"
#include "boost/shared_ptr.hpp"
#include "QSharedPointer"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene* scene = new QGraphicsScene(ui->graphicsView);
ui->graphicsView->setScene(scene);
/* 1. raw pointer */
QGraphicsEllipseItem* ell = new QGraphicsEllipseItem(100,100,50,50);
scene->addItem(ell);
/* 2. boost shared pointer
boost::shared_ptr<QGraphicsEllipseItem> eSP(new QGraphicsEllipseItem(100,100,50,50));
scene->addItem(eSP.get());*/
/* 3. Qt shared pointer
QSharedPointer<QGraphicsEllipseItem> eSP(new QGraphicsEllipseItem(100,100,50,50));
scene->addItem(eSP.data());*/
/* 4a. raw pointer as init parameter for shared pointer
QGraphicsEllipseItem* ell = new QGraphicsEllipseItem(100,100,50,50);
boost::shared_ptr<QGraphicsEllipseItem> eSP(ell);
scene->addItem(eSP.get()); // using shared pointer */
/* 4b. raw pointer as init parameter for shared pointer
QGraphicsEllipseItem* ell = new QGraphicsEllipseItem(100,100,50,50);
boost::shared_ptr<QGraphicsEllipseItem> eSP(ell);
scene->addItem(ell); // using raw pointer */
}
MainWindow::~MainWindow()
{
delete ui;
}
如你所见,我尝试了一些变种。第一个是唯一有效的。它在QGraphicsView的中心画一个圆圈。但对于我的项目,我需要一个智能指针实现。但是所有智能指针实现都不会绘制圆圈。 我犯了什么错误吗?
特别是4b最让我感到困惑。与1的唯一区别是我将原始指针另外放入共享指针并且不起作用
请帮助我!
我的环境:
- Linux Mint 17.1
- qt-sdk 2ubuntu3
- boost 1.54.0.1