cpp WHaierBoardWorkshopShowText内paintEvent 内将png文件绘制在窗口中心,png大小不变
时间: 2024-03-09 18:51:35 浏览: 60
好的,以下是在 C++ 中实现在窗口中央绘制指定图片的代码:
```cpp
#include <QWidget>
#include <QPainter>
#include <QPixmap>
#include <QResizeEvent>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
mImage.load("image.png"); // 加载图片
}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); // 设置平滑绘制
QSize pixmapSize = mImage.size(); // 获取图片大小
QSize widgetSize = size(); // 获取窗口大小
qreal x = (widgetSize.width() - pixmapSize.width()) / 2.0; // 计算图片在窗口中心的位置
qreal y = (widgetSize.height() - pixmapSize.height()) / 2.0;
painter.drawPixmap(QPointF(x, y), mImage); // 在窗口中心绘制图片
}
void resizeEvent(QResizeEvent *event) override
{
update(); // 窗口大小变化时重新绘制
}
private:
QPixmap mImage;
};
```
这段代码中,我们继承了 `QWidget` 类并重载了 `paintEvent` 和 `resizeEvent` 函数。在 `paintEvent` 函数中,我们首先获取了图片和窗口的大小,然后计算出图片在窗口中心的位置,并使用 `drawPixmap` 函数进行绘制。在 `resizeEvent` 函数中,我们重新绘制窗口,以保证在窗口大小变化时图片能够居中显示。
需要注意的是,在 C++ 中 `QPainter` 的坐标系是以 `QPointF` 类型表示的,而不是以 `int` 类型表示。因此,在计算图片在窗口中心的位置时,我们需要使用 `qreal` 类型进行计算。
另外,由于窗口大小变化时需要重新绘制,因此我们重载了 `resizeEvent` 函数。在该函数中,我们调用了 `update` 函数,以触发 `paintEvent` 函数进行重新绘制。
阅读全文