显示图像作为QGraphicsScene的背景

时间:2013-05-21 16:09:57

标签: qt qgraphicsscene

我尝试使用QGraphicsView显示一个地图,其中一些QGraphicItem-子类显示地图的区域中心。从概念上讲,我按照以下方式组织地图:

QGraphicsView
  QGraphicsScene
    QGraphicsPixmapItem  : background image, fixed until next call of loadSetting
    QGraphicsRectItem    : legend, position relative to bg is fixed throughout app
    QGraphicsEllipseItem : region centers

我希望地图的行为如下:

  • 不显示任何滚动条,背景图像填充视图/场景的所有可见区域。
  • 当重新调整窗口小部件时,QGraphics *项目将相应地重新调整大小(就像放大视图一样)
  • QGraphicsEllipseItems的相对位置保持不变,直到下次调用loadSetting()

    现在我在正确显示背景图像方面遇到了问题。

构造函数 [我将此视图直接添加到QTabWidget:myTab-> addTab(“name”,my_view_); ]

MyView::MyView(QWidget *parent) : QGraphicsView(parent) {
    bg_pixmap_ = new QGraphicsPixmapItem();
    legend_    = new MapLegend();
    setScene(new QGraphicsScene(this));
    scene()->addItem(bg_pixmap_);
    scene()->addItem(legend_);
}

加载地图设置(在程序执行期间,可以多次调用此方法)

void MyView::loadSetting(Config* cfg) {
    if (!cfg) return;

    /* (a) */
    scene()->clearFocus();
    scene()->clearSelection();
    for (int i = 0; i < symbols_.size(); i++)
        scene()->removeItem(symbols_[i]);
    qDeleteAll(symbols_);
    symbols_.clear();
    /* (a) */

    /* (b) */
    background_ = QPixmap(QString::fromStdString(cfg->district_map));
    bg_pixmap_->setPixmap(background_);
    for (size_t i = 0; i < cfg->centers.size(); i++) {
        qreal x = cfg->centers[i].first * background_.width();
        qreal y = cfg->centers[i].second * background_.height();
        MapSymbol* item = new MapSymbol(x, y, 10);
        symbols_.append(item);
        scene()->addItem(item);
    }
    /* (b) */
    update();
}

问题

  • 现在显示除了'bg_pixmap_'之外的所有项目,并且我检查了'background_'变量,它正确地加载了图像。我有什么遗漏的吗?

  • 如何实施MyView的resizeEvent以应对所需的“调整大小策略”?

0 个答案:

没有答案