【问题标题】:QT how to draw map from pixel and create tooltipQT如何从像素绘制地图并创建工具提示
【发布时间】:2014-08-11 15:16:59
【问题描述】:

我要画地图

例如地图大小1000x1000,但也有可能更大。 但我不想让窗口大小超过600x600

我想将“像素”大小设置为 2x2(更明显)(像素可以有 3 种颜色中的一种,但我称之为像素,因为它很小)

但是当我用特定颜色绘制像素时,当我将鼠标放在该像素上时,我想在箭头附近显示工具提示(即鼠标箭头),其中包含一些信息,但所有像素都有自己的工具提示(其他信息)

问题:

  1. 如何使我绘制的地图大于窗口,并且可以使用鼠标(抓取 -> 移动 -> 拖放)和滚动条移动它。
  2. 如何制作工具提示?以及如何在这张地图上放置像素?
  3. 当我点击像素时如何捕捉事件?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    如何使我绘制的地图大于窗口,并且可以移动它 带有滚动条。

    QScrollArea 可能是您想要使用的小部件。请参阅 Qt 包含的“plugandpaint”或“imageviewer”示例程序,了解如何完成。

    并用鼠标(抓取 -> 移动 -> 放下)。

    如果您希望用户能够通过单击并拖动背景来滚动图像的可见部分,您可以通过覆盖小部件的 mousePressEvent()mouseMoveEvent()mouseReleaseEvent() 方法来实现显示地图图像。请注意,使用鼠标左键滚动地图可能会与您使用鼠标左键在地图上绘制像素的目标相冲突。

    如何制作工具提示?

    调用静态方法QToolTip::showText()可以让tooltip出现

    以及如何在这张地图上放置像素?

    重绘图像后,覆盖小部件的paintEvent() 以调用drawPoint()drawPoints()。 (或者,您可以将包含地图图像的QPixmap 转换为QBitmap,将更新后的像素写入QBitmap,然后再次将QBitmap 转换回QPixmap;在某些情况下这可能更有效)

    当我点击像素时如何捕捉事件?

    在显示地图的小部件上覆盖 mousePressEvent()。

    【讨论】:

    • 我不想使用鼠标左键来绘制像素(程序这样做),drawPoints 有事件'onMouseOver'(然后我必须知道我必须显示哪些数据,以及何时显示)跨度>
    • mouseMoveEvent() 类似于 'onMouseOver'。请注意,如果您希望即使没有按住鼠标按钮也能调用 mouseMoveEvent(),则需要在小部件上调用 setMouseTracking(true)。至于绘制像素,只需将对painter->drawPixels() 的调用添加到小部件的paintEvent() 方法中——请注意,您需要在每次调用时绘制所有添加的像素,因为paintEvent()重绘整个小部件。
    • Frienser 你能告诉我有关缩放图像的事吗? (例如鼠标滚动)当我用这个像素缩放图像时,我怎么知道像素鼠标指示什么? (也许可以为像素分配一些数据,例如,带有数据的文本以显示或自己的标识符来识别像素)
    • 如果缩放是指平移,QScrollArea 对象将负责添加适当的偏移量。如果缩放是指缩小/放大,QScrollArea 将无法处理;您可以使用 QGraphicsScene/QGraphicsView 代替(然后您可以通过 QGraphicsView::transform() 或 QGraphicsView::setMatrix 实现放大转换)。或者,您可以将必要的参数传递给 QPainter::drawImage() 以放大或缩小图像,作为在paintEvent() 中绘制图像的一部分,但这有点棘手。
    • Frienser 告诉我 - scene->addEllipse(2, 2, 3, 3, pen); 以及如何在这个 Eclipse 上添加带有文本“First Eclipse”的工具提示?
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多