Qt 重写paintEvent事件划线

news/2024/12/25 15:02:34/文章来源:https://www.cnblogs.com/huvjie/p/18556202

可以自定义一个类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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837216.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归定义

GNU “GNU”是“GNUs Not Unix!”(GNU并非Unix!)的首字母递归缩写。 平衡二叉树 也叫AVL树,它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和左子树的高度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。 前序遍历 (preorder tra…

【GreatSQL优化器-03】查询开销估算

【GreatSQL优化器-03】查询开销估算 一、cost和read_time介绍 GreatSQL的优化器在创建执行计划的时候是根据每张表的行数和数据分布以及读数据硬盘消耗等信息来判断先查询哪张表后查询哪张表,要不要使用索引,这些表资源信息就被称为cost,俗称为"开销"。在这之前已…

PyODPS获取MaxComputer数据仓中业务表的最新更新时间并输出至表中

PyODPS获取MaxComputer数据仓中业务表的最新更新时间并输出1.准备两张数据表: 1.1 需要统计的库表中间表:CREATE TABLE IF NOT EXISTS dim_river_system_business_time (`id` STRING COMMENT 序号,`dept_name` STRING COMMENT ,`system_name` STRING COMMENT 所属系统,…

powerdesigner同时显示列的name和code

参考来源:数据库设计工具-PowerDesigner中table视图显示name与code 1、Tools-->Display Preferences2、Table->Advanced3、Columns-->放大镜图标4、勾选【code】并调整顺序到datatype之前5、单击ok,成功

RedisTemplate RedisConfig 序列化方式 fastjson2

Spring Data Redis 为我们提供了下面的Serializer:GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。序列化方式对比:JdkSerializationRedisSerializer: 使用…

实验 20:备忘录模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解备忘录模式的动机,掌握该模式的结构; 2、能够利用备忘录模式解决实际问题。[实验任务一]:多次撤销 改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合…

实验 21:观察者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解观察者模式的动机,掌握该模式的结构; 2、能够利用观察者模式解决实际问题。[实验任务一]:股票提醒 当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下…

MaskLLM:英伟达出品,用于大模型的可学习`N:M`稀疏化 | NeurIPS24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: MaskLLM: Learnable Semi-Structured Sparsity for Large Language Models论文地址:https://arxiv.org/abs/2409.17481 论文代码:https://github.com/NVlabs/MaskLLM创新性提出一种可学习的LLM半结构化剪枝方法MaskLLM…

Codeforces 1145 题目分析

本文将分析 Codeforces 1145 (April Fools Day Contest 2019)。 题目分析 A 题目描述:使用“灭霸排序”算法可以得到的最长子串的长度。 解法:暴力。 B 题目描述:输入一个整数 \(\in [1,99]\),若它的英文形式含有 knba 四个字母输出 NO 否则输出 YES。 解法:打表。 C 题目…

3.2点对点ppp

001ppp协议特点 ppp协议能承载不同网络层分组,ip数据报里有其他网络层协议存在。 能在多种类型的链路上运行 和广播方式相比,需要一个网络地址的协商,传送前有个协商过程,确认资源。地址002ppp协议组成 将ip数据报封装到串行链路的方法 链路控制协议LCP--建立链路,身份验证…

.net8报HTTP Error 500.30 - ASP.NET Core app failed to start

.net8调试正常,发布到IIS报HTTP Error 500.30 - ASP.NET Core app failed to start。 解决办法: 停止IIS站点,运行发布项目的“XXX.exe”,在运行窗口就可以看到具体的错误信息。 在根据具体错误信息解决。

设计和训练人工智能模型的意义是什么?

前一篇:《人工智能模型训练技术,正则化!》 序言:人工智能模型的真正价值在于其实际应用,而不仅仅停留在理论阶段。本节将通过一个简单而常见的应用场景,展示如何将前面几节所设计和训练的模型应用于实际问题。我们将使用训练好的模型对句子进行分类,具体来说,识别社交平…