Название: [Решено]QGraphicsItemGroup не получается объединить группу
Отправлено: _Vitaliy_ от Май 03, 2011, 17:54
Доброго всем времени суток. Начал осваивать 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 не предлагать.
Название: Re: QGraphicsItemGroup не получается объединить группу
Отправлено: GreatSnake от Май 04, 2011, 08:43
если данных будет несколько тысяч будет ли быстро работать? Многое зависит от платформы, использования сглаживания и т.д. - надо самому профилировать и оценивать если раскрыть то члены группы не отображаются забыл добавить group на сцену
Название: Re: QGraphicsItemGroup не получается объединить группу
Отправлено: _Vitaliy_ от Май 04, 2011, 12:40
Да, действительно недоглядел :-[. банально...
|