Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
CheBurashka21
0 / 0 / 0
Регистрация: 24.05.2016
Сообщений: 5
0

QGraphicsScene/View - пробелмы при запуске приложения

24.05.2016, 16:24. Просмотров 415. Ответов 8
Метки (Все метки)

Всем привет.

В кратце о приложении - одна экранная форма, на которой отображается карта местности с координатной сеткой, пользователь имеет возможность добавлять/удалять объекты на карте.

Карта реализована с помощью QGraphicsScene ( в коде называется scene) и отображение с помощью QGraphicsView, который собственно и лежит в ui'шке (ui->graphicsView). Размеры сцены, фон определяется в конструкторе окна.

Затем graphicsView назначается сцена, центр, масштаб, координатная сетка:

C++ (Qt)
1
2
3
4
ui->graphicsView->setScene(&scene);
ui->graphicsView->centerOn(0,0);
ui->graphicsView->fitInView(scene.sceneRect(), Qt::KeepAspectRatio);
mapnet();

Координатная сетка наносится c помощью функции mapnet():
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mapnet()
{   //удаляем старую сетку
    for (int i=scene.items().count()-1; i>-1; i--)
    {
        if(scene.items().at(i)->type()==6)
                scene.removeItem(scene.items().at(i));
    }
    //рисуем новую
    int boldness=6;
    if (1000/scale<500)
    {boldness=3;}
    if (1000/scale<250)
    {boldness=2;}
    if (1000/scale<100)
    {boldness=1;}
 
    for(int i=-3000; i<3001; i+=1000/scale)
    {
        scene.addLine(i,-3000,i,3000,QPen(QBrush(Qt::white),boldness));
    }
    for(int i=-3000; i<3001; i+=1000/scale)
    {
        scene.addLine(-3000,i,3000,i,QPen(QBrush(Qt::white),boldness));
    }
        ui->graphicsView->ensureVisible(-3000, -3000, 6000, 6000, 0 ,0);
}
При запуске приложения на форме я вижу свою сцену с правильным фоном и отсутствием каких-либо объектов, хотя должна быть как минимум сетка. При этом при отладке явно видно, что программа заходит в mapnet() и она выполняется.
Если инициировать изменение масштаба карты, то сразу отобразится сетка, которая и должна была быть.
Изменение масштаба карты:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
resizemap()
{
    ui->graphicsView->fitInView(scene.sceneRect(),Qt::KeepAspectRatio);
 
    ui->scale->setText("Масштаб: "+QString::number(1000/scale)+"м");
    ui->graphicsView->scale(scale, scale);
    double scl = 1./qSqrt(ui->graphicsView->transform().determinant());
 
    if(MDS::count>0)
    {
    mds_pointer->mds_pic->setScale(scl);
    }
 
    if(TNPA::count>0)
    {
    tnpa_pointer->tnpa_pic->setScale(scl);
    }
 
    if (NOSITEL::count>0)
    {
    nositel_pointer->nos_pic->setScale(scl);
    }
 
    if (centerobj!=0)
    {ui->graphicsView->centerOn(centerobj);}
    else
    {ui->graphicsView->centerOn(0,0);}
    mapnet();
При попытке добавить объекты на карту пользователем объект добавляется, ставится в точку (0;0), хотя координаты ему задаются другие, координатная сетка при этом также появляется после первого изменения масштаба. Если изменение масштаба вызвать в конструкторе формы - это не дает никаких изменений. Если объект был добавлен, то он окажется в точке (0;0), а не там, куда его добавляли. Если при этом пользователь изменит масштаб - карта перерисуется, появится сетка и объекты расставятся по тем координатам, которые им были заданы.

При этом, если загрузить положение объектов из заранее сохраненного файла, то объекты расставятся как надо, появится сетка и т.д. - это аналогично изменению масштаба пользователем вручную.

Собственно вопрос - как заставить корректно работать сцену и графиксвью сразу после запуска программы, ведь файла для загрузки может и не быть?

Вернуться к обсуждению:
QGraphicsScene/View - пробелмы при запуске приложения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2016, 16:24
Готовые ответы и решения:

Ошибка при запуске приложения
Я скачал QT creator на Windows 10,попробовал запустить,для теста,программу,и...

Warning при запуске приложения
Когда я запускаю свое приложение, в консоль выводится &quot;Qt Warning - invalid...

Задержка при запуске приложения
Надо выставить задержку при запуске приложения, есть такая функция main: ...

При запуске приложения ничего не происходит
Делаю парсер Excel файлов, все было нормально, но сегодня открываю Qt Creator,...

Спрятать окно при запуске приложения
Необходимо запустить программу, но, чтобы главная форма находилась в скрытом...

8
Другие темы раздела
C++ Qt QSqlTableModel выборка http://www.cyberforum.ru/qt/thread1744145.html
Здравствуйте! В общем у меня есть файл с избранными блюдами, там их мб великое множество. Я пытаюсь сделать фильтр, который бы выводил все эти блюда в этой же базе, то есть в QSqlTableModel. Пока...
C++ Qt Как закрыть программу из конструктора mainwindow? Как закрыть программу из конструктора mainwindow? http://www.cyberforum.ru/qt/thread1744143.html
Полигон на сцене C++ Qt
Здравствуйте. Подскажите, как добавить на графическую сцену полигон, реагирующий на нажатие мыши. Не понятно что наследовать: qgraphicspolygonitem или qpolygon. Желательно код. Так проще разобраться.
C++ Qt Организация работы с QGraphicsScene в игре
Здравствуйте! У меня появился теоретический вопрос на тему Qt. Делаю я игру, допустим, арканоид, в нём по сути есть три типа объектов, шарик, площадка и тайлы, которые шариком надо разбивать. Мне...
C++ Qt QSqlTableModel не могу добавить значение в столбец http://www.cyberforum.ru/qt/thread1743970.html
Необходимо добавить столбец в таблицу и записать туда значение, но что-то не получается (когда добавляю строку, то все работает) model2->insertColumn(model2->columnCount()); //добавляю...
C++ Qt QJsonValue в Qt5 Не подскажете QJsonValue представляет из себя JSON в Qt 5 да? А если у меня есть класс с какими то полями. И я хочу этот класс преобразовать в JSONObject или JSONArray например, или в String который... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru