Russian Qt Forum
Апрель 29, 2024, 09:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]QGraphicsItemGroup не получается объединить группу  (Прочитано 4052 раз)
_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 не предлагать.
« Последнее редактирование: Май 04, 2011, 17:53 от _Vitaliy_ » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Май 04, 2011, 08:43 »

Цитировать
если данных будет несколько тысяч будет ли быстро работать?
Многое зависит от платформы, использования сглаживания и т.д. - надо самому профилировать и оценивать

Цитировать
если раскрыть то члены группы не отображаются
забыл добавить group на сцену
Записан

Qt 5.11/4.8.7 (X11/Win)
_Vitaliy_
Гость
« Ответ #2 : Май 04, 2011, 12:40 »

Да, действительно недоглядел  Обеспокоенный.
Код:
...
scene.addItem(group);
банально...

« Последнее редактирование: Май 04, 2011, 17:54 от _Vitaliy_ » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 22.