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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигнал changed в QGraphicsScene  (Прочитано 2903 раз)
skaz54
Новичок

Offline 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

Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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