Сигнал changed в QGraphicsScene |
Здравствуйте, гость ( Вход | Регистрация )
Сигнал changed в QGraphicsScene |
skaz54 |
8.12.2013, 19:57
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 15.3.2011 Пользователь №: 2503 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте.
Имеется сцена. На ней расположены 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 Спасибо. |
|
|
Litkevich Yuriy |
9.12.2013, 9:45
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
больше на баг смахивает.
|
|
|
Алексей1153 |
10.12.2013, 17:09
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
>>Можно ли как-нибудь сделать, чтобы и при удалении QGraphicsItem'а с установленным сигналом, обновлялась только область сцены под QGraphicsItem'ом ?
может быть, как-то и можно. А вот точно нужно ? Отчего такое требование возникло ? Попробуй также сначала hide() элемент, затем update() сцену, только потом удалить Сообщение отредактировал Алексей1153 - 10.12.2013, 17:10 |
|
|
Litkevich Yuriy |
13.12.2013, 21:37
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
alexei-evil |
14.1.2014, 11:42
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 10.1.2012 Пользователь №: 3114 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Текстовая версия | Сейчас: 28.4.2024, 16:06 |