Доброго всем времени суток.
Начал осваивать QGraphics* для решения своих задач. Столкнулся с проблемой: не получается объединить группу и ее отобразить.
За основу взят пример от Шлее.
/* ======================================================================
** main.cpp
** ======================================================================
**
** ======================================================================
** Copyright (c) 2007 by Max Schlee
** ======================================================================
*/
#include <QtGui>
#include "MyView.h"
#include <QGraphicsItemGroup>
#include <QGraphicsItem>
// ======================================================================
class SimpleItem : public QGraphicsItem {
private:
enum {nPenWidth = 3};
public:
virtual QRectF boundingRect() const
{
QPointF ptPosition(-10 - nPenWidth, -10 - nPenWidth);
QSizeF size(20 + nPenWidth * 2, 20 + nPenWidth * 2);
return QRectF(ptPosition, size);
}
virtual void paint(QPainter* ppainter,
const QStyleOptionGraphicsItem*,
QWidget*
)
{
ppainter->save();
ppainter->setPen(QPen(Qt::blue, nPenWidth));
// ppainter->drawEllipse(-10, -10, 20, 20);
ppainter->restore();
}
virtual void mousePressEvent(QGraphicsSceneMouseEvent* pe)
{
QApplication::setOverrideCursor(Qt::PointingHandCursor);
QGraphicsItem::mousePressEvent(pe);
}
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* pe)
{
QApplication::restoreOverrideCursor();
QGraphicsItem::mouseReleaseEvent(pe);
}
};
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QWidget wgt;
QGraphicsScene scene(QRectF(-100, -100, 640, 480));
MyView* pView = new MyView(&scene);
QPushButton* pcmdZoomIn = new QPushButton("&Zoom In");
QPushButton* pcmdZoomOut = new QPushButton("Z&oom Out");
QPushButton* pcmdRotateLeft = new QPushButton("&Rotate Left");
QPushButton* pcmdRotateRight = new QPushButton("Ro&tate Right");
pView->setRenderHint(QPainter::Antialiasing, true);
SimpleItem* pSimpleItem = new SimpleItem;
scene.addItem(pSimpleItem);
pSimpleItem->setPos(0, 0);
pSimpleItem->setFlags(QGraphicsItem::ItemIsMovable);
QGraphicsLineItem* pLineItem;
pLineItem = new QGraphicsLineItem(0, 0, 0, 200); // os Y
pLineItem->setPen(QPen(Qt::red,2));
pLineItem->setParentItem(pSimpleItem);
pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
QGraphicsLineItem* pxLineItem;
pxLineItem = new QGraphicsLineItem(0, 100, 300, 100);// os X
pxLineItem->setPen(QPen(Qt::red,2));
pxLineItem->setParentItem(pSimpleItem);
pxLineItem->setFlags(QGraphicsItem::ItemIsMovable);
QGraphicsLineItem* Item;
for(int i=1; i<=200; i++)
{
Item = new QGraphicsLineItem(i,i,i,i); // если данных будет несколько
Item->setPen(QPen(Qt::green,2)); // тысяч будет ли быстро работать?
Item->setParentItem(pxLineItem); //
// Item->setFlags(QGraphicsItem::ItemIsMovable); //
}
/*
QGraphicsItemGroup *group = new QGraphicsItemGroup; // если раскрыть
group->addToGroup(pxLineItem); // то члены группы
group->addToGroup(Item); // не отображаются
*/
QObject::connect(pcmdZoomIn, SIGNAL(clicked()),
pView, SLOT(slotZoomIn())
);
QObject::connect(pcmdZoomOut, SIGNAL(clicked()),
pView, SLOT(slotZoomOut())
);
QObject::connect(pcmdRotateLeft, SIGNAL(clicked()),
pView, SLOT(slotRotateLeft())
);
QObject::connect(pcmdRotateRight, SIGNAL(clicked()),
pView, SLOT(slotRotateRight())
);
//Layout setup
QVBoxLayout* pvbxLayout = new QVBoxLayout;
pvbxLayout->addWidget(pView);
pvbxLayout->addWidget(pcmdZoomIn);
pvbxLayout->addWidget(pcmdZoomOut);
pvbxLayout->addWidget(pcmdRotateLeft);
pvbxLayout->addWidget(pcmdRotateRight);
wgt.setLayout(pvbxLayout);
wgt.show();
return app.exec();
}
Собственно вопросов 2 и они озвучены после "//". (В цикле и ниже где пытаюсь создать группу)
Единственное просьба qwt не предлагать.