要在 QTreeWidget
的 paintEvent
中按原图片大小贴图而不进行缩放,你需要直接使用 drawPixmap
方法,传递图片的原始尺寸,而不是通过 scaled()
函数来调整其大小。以下是如何实现这一点:
修改后的代码示例
#include <QPainter>
#include <QPixmap>
#include <QTreeWidget>
void LeftTreeWidget::paintEvent(QPaintEvent *event) {
// 调用基类的 paintEvent 以保留树形控件的正常绘制
QTreeWidget::paintEvent(event);
// 创建一个 QPainter 对象,并在 viewport 上进行绘制
QPainter painter(viewport());
painter.setRenderHint(QPainter::Antialiasing);
// 定义指定的位置,确保该位置不会与树形控件项重叠
QRect rect(30, 78, 260, 40); // 可以根据需要调整这个矩形的位置和尺寸
// 加载背景图像
QString imagePath = ":/png/liebiaotoubeijing.png"; // 图片路径
QPixmap pixmap(imagePath);
if (!pixmap.isNull()) {
// 在指定位置按原始大小绘制图片
painter.drawPixmap(rect.topLeft(), pixmap);
// 如果你想让图片从某个点开始绘制(例如上方或左侧),可以考虑调整 rect.topLeft()
// painter.drawPixmap(QPoint(30, 78), pixmap); 也可以这样写
} else {
qDebug() << "Failed to load image:" << imagePath;
}
}
解释
调用基类的
paintEvent
: 首先调用QTreeWidget::paintEvent(event)
确保树形控件正常显示。如果不调用,树形控件将不会正确地显示它的内容。创建
QPainter
: 创建一个画家对象,用于在控件上进行绘制。定义绘制区域: 使用
QRect
来定义您希望绘制图像的位置。此处可能会依赖于你的布局和其他 UI 元素,因此请相应地进行调整。加载并绘制图像: 使用提供的路径加载图像,如果加载成功,则使用原始大小直接绘制图像。注意到这里没有使用
.scaled()
方法,这样会保持图像的实际大小。错误处理: 检查加载的 QPixmap 是否为空,以防止尝试在未成功加载的情况下进行绘制。
这样就可以确保您的背景图片按照原始大小显示。如果有任何其他需求或者问题,请随时问我!
内容由零声教学AI助手提供,问题来源于学员提问