Qt 重写paintEvent事件画线
可以自定义一个类QtImageLabel
继承于QLabel
,重写paintEvent
事件划线,写文字等。如果用 ui 设计,将 QLabel 控件提升为 QtImageLabel 类型即可。
QtImageLabel.h
protected:
void paintEvent(QPaintEvent *) override;
QtImageLabel.cpp
#pragma execution_character_set("utf-8")
QtImageLabel::QtImageLabel(QWidget *parent)
: QLabel(parent)
{
setScaledContents(true);
setAttribute(Qt::WA_QuitOnClose, false);
}
void QtImageLabel::paintEvent(QPaintEvent *e)
{
QLabel::paintEvent(e);
QPainter painter(this);
QRect rect = geometry();
int c_x = rect.width() / 2;
int c_y = rect.height() / 2;
painter.setPen(QPen(Qt::red, 1));
painter.drawLine(c_x, 0, c_x, c_y * 2);
painter.drawLine(0, c_y, c_x * 2, c_y);
painter.drawRect(c_x - 130, c_y - 100, 260, 200);
painter.drawEllipse(c_x - 130, c_y - 100, 260, 200);
painter.setPen(Qt::green);
painter.drawRect(c_x - 200, c_y - 150, 400, 300);
painter.setPen(Qt::red);
painter.drawText(2*c_x - 50, 20, "字体显示");
}
主界面 QtImageShow.cpp
#include "QtImageShow.h"
#include "ui_QtImageShow.h"
#include "QPixmap"
#pragma execution_character_set("utf-8")
QtImageShow::QtImageShow(QWidget *parent)
: QWidget(parent)
{
ui = new Ui::QtImageShow();
ui->setupUi(this);
setWindowTitle("图像显式");
setAttribute(Qt::WA_QuitOnClose, false);
#if 1
// 跟随比例变化
ui->label->setScaledContents(true);
QPixmap pixmap("./01.png");
//pixmap.load("./01.jpg");
// 让图片大小适应控件大小, 如果不需要,可以直接显示原图
QPixmap s_img = pixmap.scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
//ui->label->setPixmap(s_img);
ui->label->setPixmap(pixmap);
#endif
}
QtImageShow::~QtImageShow()
{
delete ui;
}
void QtImageShow::paintEvent(QPaintEvent * e)
{
}
// 按钮,切换图片显示 01.png 02.png
void QtImageShow::on_pushButton_clicked()
{
static int img_id{ 0 };
img_id = img_id = std::abs(img_id - 1);
QString path = QString("./0") + QString::number(img_id+1) + ".png";
QPixmap pixmap(path);
ui->label->setPixmap(pixmap);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-11-20 C# Winform 跨线程调用窗体
2022-11-20 C# WPF 测试直接绑定依赖属性双向传递是没有问题的
2022-11-20 C# WPF 测试基类接受派生类实例再用基类赋值个 DataContext 绑定能找到派生类元素
2022-11-20 C# WPF 自定义控件 UserControl 绑定