skaz54
Новичок
Offline
Сообщений: 14
|
|
« : Декабрь 08, 2013, 19:54 » |
|
Здравствуйте. Имеется сцена. На ней расположены QGraphicsItem'ы. Отрисовка сцены выполняется в PaintEvent(QPaintEvent * event). Если установить соединение с сигналом QGraphicsScene->changed(const QList<QRectF> & region), то при удалении со сцены QGraphicsItem выполняется отрисовка всей видимой части сцены - значение области рисования передается в PaintEvent в параметре event->rect(). А в слот, который соединен с сигналом приходит один прямоугольник размером со сцену. Если убрать соединение с сигналом QGraphicsScene->changed, то в PaintEvent приходит размер обновления области сцены, равный размеру удаляемого QGraphicsItem'а. Причем, при добавлении QGraphicsItem'а на сцену при соединенном сигнале, обновление выполняется для области QGraphicsItem'а с соединенным сигналом или нет.
Можно ли как-нибудь сделать, чтобы и при удалении QGraphicsItem'а с установленным сигналом, обновлялась только область сцены под QGraphicsItem'ом ? Возможно, надо установить какие-нибудь параметры для сцены?
В качестве образца проблемы взят пример из OT - examples\graphicsview\diagramscene. Добавлен код в diagramscene.cpp: DiagramView::DiagramView(QWidget *parent): QGraphicsView(parent) { }; void DiagramView::paintEvent(QPaintEvent * event) { QRect rect1 = event->rect(); qDebug() << "paintEvent" << rect1; QGraphicsView::paintEvent(event); } Добавлен код в diagramscene.h: class DiagramView : public QGraphicsView { Q_OBJECT public: DiagramView(QWidget *parent = 0); private: void paintEvent(QPaintEvent * event); };
Добавлен код в mainwindow.cpp в функцию MainWindow::MainWindow(): view = new DiagramView(this); view->setScene(scene); connect(scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(changeScene(QList<QRectF>)));
и void MainWindow::changeScene(QList<QRectF> rects) { qDebug() << "" << rects; }
и соответственно в mainwindow.h
Проблема в строке connect(scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(changeScene(QList<QRectF>)));
QT 4.7
Спасибо.
|