crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Проблема с QGraphicsView и QGraphicsScene
NordWest
  опции профиля:
сообщение 31.3.2011, 13:40
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Пытаюсь написать диалог с выбором цветов для набора элементов, отображаемых в основном окне программы. Для этого создал в дизайнере диалоговое окно, в которое поместил QGraphicsView. Мне нужно, чтобы в нём отображался пример элементов основного окна с элементами выбранных цветов.

В разделе private класса окна объявил объект QGraphicsScene
QGraphicsScene *scene;


В конструкторе так:
ui->setupUi(this);
ui_grView = qFindChild<QGraphicsView *>(this, "grView");
...
scene = new QGraphicsScene;
ui_grView->setScene(scene);
ui_grView->show();
connect(scene, SIGNAL(changed(QList<QRectF>)), ui_grView, SLOT(updateScene(QList<QRectF>)));

bgCol.setRgb(Qt::black);
bgBrush.setColor(bgCol);
scene->setBackgroundBrush(bgBrush);
...


Не знаю, нужен ли тут connect или задав сцену QGraphicsView я уже задаю связь обновлений. В общем, так не работает, черный фон не появляется. Получилось только если три последних строчки вставить между созданием scene и установкой её объекту ui_grView. Но мне то нужно задать обновление отображения при смене того же цвета фона или цвета одного из других элементов.

Выше представлен последний вариант, который я пробовал. Первоначально у меня был вариант из одного примера с переопределением paintEvent:

void setupMarksColor::paintEvent(QPaintEvent *event)
{
      updateBaseImage();
}

void setupMarksColor::updateBaseImage()
{
    bgBrush.setColor(bgCol);
    scene->setBackgroundBrush(bgBrush);
    
    QList <QRectF> rList;
    rList << ui_grView->sceneRect();
    ui_grView->updateScene(rList);
}


Т.е. пытался обновлять сцену без connect'a в конструкторе. Но тоже пусто. Не очень я понимаю взаимоотношения QGraphicsView и QGraphicsScene и примеры как-то не помогают. Подскажите что исправить и почему, если не сложно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
NordWest
  опции профиля:
сообщение 1.4.2011, 0:57
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Так. Я не понимаю, как заставить сцену обновиться с новым цветом. И что вообще значат эти цвета.

Вот у меня QGraphicsView в окне сплошь белый. Как его залить черным фоном? scene->setBackgroundBrush меняет не цвет фона, так? Это некая фоновая кисть. Т.е. если рисуешь зелёный кружок, то он будет нарисован на фоне цвета этой кисти. Или нет? Чтобы полностью белый элемент QGraphicsView сделать чёрным нужно ему какой то параметр указать "чёрный" или взять чёрную кисть и добавить в сцену прямоугольник с размерами во всю сцену.

Всё равно непонятно объяснил, потому что сам плохо понял схему QGraphicsView <-> QGraphicsScene. Лучше скажу что надо. В диалоговом окне задается 5 цветов, фон и 4 цвета для примерных кружков на этом фоне. Нужно нарисовать такое превью, чтобы показать как эти разноцветные кружки будут видеться на выбранном фоне.

Создал я элемент QGraphicsView в дизайнере. Создал QGraphicsScene. Дальше как? Мне нужно фон самому нарисовать, условно добавив прямоугольник или scene->setBackgroundBrush действительно заливает данной кистью весь фон? Те 4 кружка нужно один раз создать и добавить, а потом как-то менять им цвета? Если я поменяю что-то в scene, что мне нужно, чтобы обновилась и картинка?

Где-то так, надеюсь на понимание.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.4.2024, 0:55