要在 QTreeWidget
的 paintEvent
中按原图片大小绘制,而不是缩放到项的矩形区域,你只需要直接使用图像的原始尺寸进行绘制。以下是如何实现这一点的修改示例:
修改后的代码
#include <QPainter>
#include <QPixmap>
#include <QTreeWidget>
void LeftTreeWidget::paintEvent(QPaintEvent *event) {
// 首先调用基类的 paintEvent 以确保树形控件正常绘制
QTreeWidget::paintEvent(event);
// 创建一个 QPainter 对象,在 viewport 上进行绘制
QPainter painter(viewport());
painter.setRenderHint(QPainter::Antialiasing);
// 检查是否有顶层项
if (topLevelItemCount() > 0) {
QTreeWidgetItem *firstItem = topLevelItem(0);
QRect rect = visualItemRect(firstItem); // 获取第一个项的矩形区域
// 加载背景图像
QString imagePath = ":/png/liebiaotoubeijing.png"; // 替换为你的图片路径
QPixmap pixmap(imagePath);
if (!pixmap.isNull()) {
// 在 rect 的左上角绘制图像,保持其原始大小
QPoint drawPoint(rect.topLeft().x(), rect.topLeft().y());
painter.drawPixmap(drawPoint, pixmap); // 按照原图大小贴图,不缩放
} else {
qDebug() << "Failed to load image:" << imagePath;
}
}
}
关键点
不缩放: 使用
drawPixmap
绘制时传递原始的pixmap
,而没有使用.scaled()
方法。因此,图像将会按其原始尺寸被绘制。位置调整: 如果您希望根据第一个项的位置来决定图像的绘制位置,可以通过获取
visualItemRect(firstItem)
的左上角坐标来确定。错误处理: 添加了对
pixmap.isNull()
的检查,以确保成功加载图片,否则输出调试信息。
这种方式将确保您的背景图片按照它的实际尺寸显示,并不会进行任何缩放。如果还有其他问题,请随时询问!
内容由零声教学AI助手提供,问题来源于学员提问