Qt C++ QStatusbar 显示表示状态的图片

embedded/2025/1/16 8:02:21/

1、前言

在C++ Qt编程中默认主窗口MainWindow底下自带控件QStatusbar,很多情况下都使用其显示程序的连接状态或开关状态,因为时常需要将图片设置为圆形显示,所以这里记录一下常用的设置的代码,方便以后复制粘贴。

2、封装设置状态的函数

(1)使用遮罩将图片设置成圆形

QPixmap Utils::createCircularPixmap(const QPixmap &src, int diameter)
{// 创建一个圆形的 QBitmapQBitmap mask(diameter, diameter);mask.fill(Qt::color0);QPainter painter(&mask);painter.setRenderHint(QPainter::Antialiasing);painter.setBrush(Qt::color1);painter.drawEllipse(0, 0, diameter, diameter);painter.end();// 创建一个新的 QPixmapQPixmap circularPixmap(diameter, diameter);circularPixmap.fill(Qt::transparent);painter.begin(&circularPixmap);painter.setRenderHint(QPainter::Antialiasing);QPainterPath pathTemp;pathTemp.addEllipse(0, 0, diameter, diameter);painter.setClipPath(pathTemp);painter.drawPixmap(0, 0, diameter, diameter, src);painter.end();// 应用圆形遮罩circularPixmap.setMask(mask);return circularPixmap;
}

(2)调整大小并显示在QStatusbar中

void Utils::statusbarSetPixmap(QStatusBar *statusbar, QString pixPath)
{QLabel *lastLabel = statusbar->findChild<QLabel *>(statusbar->objectName()+"_pixLabel");if(lastLabel != nullptr){delete lastLabel;}int statusbarSize = 30;//状态栏的大小,圆的直径?QLabel *imageLabel = new QLabel(/*qobject_cast<QWidget*>(*/statusbar/*->parent())*/);imageLabel->setFixedSize(statusbarSize, statusbarSize);imageLabel->setObjectName(statusbar->objectName()+"_pixLabel");QPixmap pixmap(pixPath);QPixmap pixmap2 = pixmap.scaled(statusbarSize, statusbarSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);imageLabel->setPixmap(Utils::createCircularPixmap(pixmap2, statusbarSize));statusbar->addWidget(imageLabel);
}

3、调用

举例两张图片:

    

调用,这里以http服务器是否开启为例子:

if(httpServerIsOpen){Utils::statusbarSetPixmap(ui->statusbar, httpTrueImg);//显示开启状态
}else{Utils::statusbarSetPixmap(ui->statusbar, httpFalseImg);//显示关闭状态
}

效果图:

    


http://www.ppmy.cn/embedded/154344.html

相关文章

【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、计算机基础概念 1.1、什么是计算机 1.2、什么是编程 1.3、编程语言有哪些 2、Python 背景知识 2.…

新质生产力与数字化转型

在中国经济转型和科技创新的背景下&#xff0c;“新质生产力”作为一个在中国政策语境中提出的新概念&#xff0c;逐渐成为推动经济发展、产业升级和科技进步的核心议题。新质生产力强调通过科技创新、产业升级以及生产要素创新性配置&#xff0c;推动中国经济朝着高质量、绿色…

【数据结构-堆】力扣1792. 最大平均通过率

一所学校里有一些班级&#xff0c;每个班级里有一些学生&#xff0c;现在每个班都会进行一场期末考试。给你一个二维数组 classes &#xff0c;其中 classes[i] [passi, totali] &#xff0c;表示你提前知道了第 i 个班级总共有 totali 个学生&#xff0c;其中只有 passi 个学…

信创改造-龙蜥操作系统搭载MySql、Tomcat等服务

龙蜥操作系统 Anolis OS 8 是 OpenAnolis 社区推出的完全开源、中立、开放的发行版&#xff0c;它支持多计算架构&#xff0c;也面向云端场景优化&#xff0c;兼容 CentOS 软件生态。Anolis OS 8 旨在为广大开发者和运维人员提供稳定、高性能、安全、可靠、开源的操作系统服务。…

第一次作业三种方式安装mysql(Windows和linux下)作业

在Windows11上安装sever&#xff08;服务&#xff09;端和客户端 server端安装 打开官网MySQL 进入到主页 点击DOWMLOAD 进入下载界面 点击下方MySQL Community (GPL) Downloads 进入社区版mysql下载界面 点击 MySQL Community Server 进入server端下载 选择8.4.3LTS&…

matplotlib将画的图像存于内存

buf io.BytesIO()plt.savefig(buf, formatpng)buf.seek(0)plt.close() io.StringIO() 和 io.BytesIO() 是 Python 标准库 io 模块中的两个类&#xff0c;分别用于创建内存中的文本流和二进制流。它们常常用于单元测试、文件操作的模拟等场景。 基础概念 io.StringIO(): 创建…

《鸿蒙Next平台:决策树面对噪声数据的鲁棒性逆袭》

在机器学习领域&#xff0c;决策树是一种强大的模型&#xff0c;但训练数据中的噪声往往会影响其性能和鲁棒性。在鸿蒙Next平台上&#xff0c;我们可以采用多种策略来增强决策树模型在面对噪声数据时的鲁棒性。 数据预处理层面 数据清洗&#xff1a;利用鸿蒙Next平台的数据处理…

网络层协议-----IP协议

目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址。 它是分配给连接到互联网的设备&#xff08;如计算机、服务器、智能手机…