На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Вопрос про QDMapView

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Вопрос про QDMapView
 
Объясните один момент. Я создаю динамически объект класса QDMapView, загружаю карту все ок, подгружаю матрицу высот, все замечательно.
Но! Мне необходимо использовать данный объект в качестве viewport в QGraphicsView, после вызова QGraphicsView::setViewport() все отрисовывается и скроллится как надо, однако при этом перестают работать
события левой кнопки мыши (правая работает - контектное меню отображается), а также перестают отображаться QGraphicsItem из сцены. События мыши передаются в объект сцены из QGraphicsView -> viewport  в объект класса QGraphicsScene автоматически (если не перехватываются в QGraphicsView, или viewport), но Ваш класс похоже работает как-то не так, где надо "нажать кнопку", чтобы он заработал стандартным образом, и пропускал через себя события мыши, а также рисовал на себе QGraphicsItem'c?

Спасибо!
 
Компонент QDMapView является самодостаточным. На мой взгляд Вам подойдет пример, реализованный только на MAPAPI-интерфейсе. Пример расположен в каталоге ./SDK/Qt4
 
Спасибо! Именно так, по-старинке, я и сделал.
 
Подниму старую тему ввиду того, что хочется рисовать любые геометрические объекты, с привязанными к ним данными, поверх карты. А при наведение мыши на эти объекты показывать, например, tooltip с какой-нибудь информацией.
Я пошёл немного другим путём в отличие от автора темы. За основу был взят пример myfirst, который устанавливается вместе с ГИС Конструктор. В конструкторе MainForm1 добавил несколько строк:
Код
QGraphicsScene* scene = new QGraphicsScene(this);
QGraphicsView* view = new QGraphicsView(scene, ui.DMapView1);
view->resize(300, 300);//для начала просто отобразим прозрачный квадрат в левом верхнем углу
view->setWindowFlags(Qt::FramelessWindowHint);
//view->setAttribute(Qt::WA_TranslucentBackground, true);
view->setAttribute(Qt::WA_NoSystemBackground);
view->setAttribute(Qt::WA_TransparentForMouseEvents, true);
//view->setWindowOpacity(0);

Пробовал ещё вот так:
Код
QPalette palette = view->palette();
palette.setColor(QPalette::Window, Qt::transparent);
view->setPalette(palette);

и другие способы, которые встретил в гугле. Однако view отображался либо белым, либо серым, либо вообще чёрным, но только не прозрачным как мне этого хотелось. Единственное, что из этого работало, это WA_TransparentForMouseEvents.
Может подскажете, как решить данную задачу, не используя MAPAPI-интерфейс?
Всё делаю в астра линукс qt4.

Например, вот такое простое приложение - окно с календарём:
Код
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QGraphicsView>
#include <QGraphicsScene>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QGraphicsScene * scene = new QGraphicsScene(this);
    QGraphicsView * view = new QGraphicsView(scene, ui->calendarWidget); //Выводим QGraphicsView поверх календаря
    view->resize(100, 100);

    view->setStyleSheet("background : transparent; border : 2px solid red");
}


MainWindow::~MainWindow()
{
    delete ui;
}

работает как и ожидается: прозрачный QGraphicsView с красной рамкой поверх календаря.
Изменено: Tacio - 29.10.2015 15:13:25
 
Компонент QDMapView является самодостаточным. Добавлять его в другой компонент не следует.
Как писал выше -
Цитата
Вам подойдет пример, реализованный только на MAPAPI-интерфейсе. Пример расположен в каталоге ./SDK/Qt4
 
gislinux, Здравствуйте. По аналогии с функцией изменения масштаба из примера mapinfo и добавил аналогичную в myfirst. Вопрос почему размер карты меняется в обе стороны, а ScrollBar и подложка карты не увеличиваются и не уменьшаются? Код приводить не стал т.к. он не менялся. Изменил только объекты вывода карты.
Astra Linux Special Edition 1.6 релиз «Смоленск»/ГИС Конструктор МО РФ
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности