gpt4 book ai didi

Qt 绘制的内容丢失

转载 作者:行者123 更新时间:2023-12-04 06:59:41 24 4
gpt4 key购买 nike

我正在编写一个信息屏幕程序。我创建了一个全屏小部件并在其上绘制内容。

为了延长 TFT 显示设备的生命周期,我想实现像素移位功能。换句话说,在每个 X 分钟,我将屏幕向左/右/上/下移动 像素。

我的方法如下:

  • 我使用两层(两个 QWidget)。
  • 我在顶层绘制内容。
  • 当执行像素移位时,我只是将顶层移动指定的偏移量。
  • 然后在底层填充背景色。

  • 但是,我发现了一个问题:

    如果我将顶层向上移动 10 个像素,则 10 个像素的内容会离开屏幕。但是当我将这一层向下移动 10 个像素时。 10 像素的内容不会更新,它消失了。

    我怎样才能保留这些 10 像素的内容?有没有什么神奇的小部件标志可以解决这个问题?

    更新 1:
    代码是用D语言编写的,但很容易理解:
    class Canvas: QWidget
    {
    private QPixmap content;

    this(QWidget parent)
    {
    super(parent);
    setAttribute(Qt.WA_OpaquePaintEvent, true);
    }

    public void requestForPaint(QPixmap content, QRegion region)
    {
    this.content = content;
    update(region);
    }

    protected override void paintEvent(QPaintEvent event)
    {
    if (this.content !is null)
    {
    QPainter painter = new QPainter(this);
    painter.setClipping(event.region);
    painter.fillRect(event.region.boundingRect, new QColor(0, 0, 0));
    painter.drawPixmap(event.region.rect, this.content);
    this.content = null;
    painter.setClipping(false);
    }
    }
    }

    class Screen: QWidget
    {
    private Canvas canvas;

    this()
    {
    super(); // Top-Level widget
    setAutoFillBackground(True);
    this.canvas = new Canvas(this);
    showFullScreen();
    }

    public void requestForPaint(QPixmap content, QRegion region)
    {
    this.canvas.requestForPaint(content, region);
    }

    private updateBackgroundColor(QColor backgroundColor)
    {
    QPalette newPalette = palette();
    newPalette.setColor(backgroundRole(), backgroundColor);
    setPalette(newPalette);
    }

    public shiftPixels(int dx, int dy)
    {
    this.canvas.move(dx, dy);
    updateBackgroundColor(new QColor(0, 0, 0)); // Just a demo background color
    }
    }

    Screen screen = new Screen;
    screen.requestForPaint(some_content, some_region);
    screen.shiftPixels(0, -10);
    screen.shiftPixels(0, 10);

    最佳答案

    查看代码,我的第一个猜测是您的地区可能有误。每次尝试重新绘制整个小部件,看看是否能解决丢失 10 像素的问题。如果是,那么尝试找出为什么您的区域没有覆盖新暴露的部分。

    沿着这些路线的一种可能性:我在您的 Screen::requestForPaint 中注意到您直接调用的方法 Canvas::requestForPaint不对该地区做任何事情。在 Qt 中,任何类似的坐标通常被假定为局部坐标,因此如果您不考虑 Canvas 小部件的当前位置,您可能会得到一个不正确的区域。

    关于Qt 绘制的内容丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2073321/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com