深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)

QT自定义控件(电池)

  • Chapter1 QT自定义控件(电池)
  • Chapter2 Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)
    • 1 Display Widgets简介
    • 2 如何使用Display Widgets部件
  • Chapter3 Qt自定义控件电池组件使用
    • 前言
    • 一、最基本的使用方法
    • 二、Battery 类的功能和 API
    • 三、Qt Desiner使用电池组件
    • 四、示例代码
  • Chapter4 Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)
  • Chapter5 QT开发实例之常用控件(上)
    • 设置窗口属性
    • 字体形状窗体
  • Chapter6 用一个 QProgressBar 模拟手机电池充电
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果


Chapter1 QT自定义控件(电池)

原文链接:https://blog.csdn.net/weixin_43676892/article/details/109451136

做一个电池控件,需要一个拖动条和一个进度条。
不多说,直接上代码
.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QProgressBar>
#include <QSlider>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

protected slots:
    void on_SliderValueChange();

private:
    QSlider *m_pSlider=nullptr;
    QProgressBar *m_batteryBar=nullptr;
};

#endif // WIDGET_H

.cpp文件

#include "widget.h"
#include <QVBoxLayout>
#include <QLabel>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QWidget *batterytopwgt=new QWidget(this);
    QLabel *topLabel=new QLabel(this);
    topLabel->setStyleSheet("background:black");
    QVBoxLayout *topLayout=new QVBoxLayout(this);
    topLayout->addStretch();
    topLayout->addWidget(topLabel);
    topLayout->addStretch();
    topLayout->setMargin(0);
    batterytopwgt->setLayout(topLayout);


    QVBoxLayout *mainLayout=new QVBoxLayout(this);
    m_pSlider=new QSlider(Qt::Horizontal,this);   //将拖动条设置为横向
    m_pSlider->setRange(0,100);   //设置拖动条范围
    m_batteryBar=new QProgressBar(this);
    m_batteryBar->setRange(0,100);
    m_batteryBar->setFixedHeight(50);
    m_batteryBar->setFixedWidth(100);
    m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:green}");  //设置样式
    mainLayout->addWidget(m_batteryBar);
    mainLayout->addWidget(m_pSlider);
    mainLayout->setMargin(0);
    mainLayout->addStretch();
    this->setLayout(mainLayout);

    connect(m_pSlider,&QSlider::valueChanged,this,&Widget::on_SliderValueChange);   //拖动条每次值改变都会执行
}

Widget::~Widget()
{

}

void Widget::on_SliderValueChange()
{
    int sliderValue=m_pSlider->value();
    m_batteryBar->setValue(sliderValue);

    if(m_batteryBar->value()<=20)  //如果值小于20,则颜色为红色
    {
        m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:red}");
    }
    else  //大于20则值为绿色
    {
         m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:green}");
    }
}

main.cpp文件

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

效果图:
在这里插入图片描述

这个我做的很简单,不过原理基本上是这样的。电池的样式可以根据自己喜好进行绘制。

样式表使用:

//如果值小于20,则颜色为红色
m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:red}");
//如果值大于20则值为绿色
m_batteryBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid grey;text-align:center}QProgressBar::chunk{border-radius:5px;background:green}");

Chapter2 Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)

原文链接:https://blog.csdn.net/qq_41921826/article/details/136871217

1 Display Widgets简介

Qt Designer 显示窗口部件提供的面板中,提供了 10 种显示小部件。以下是Display Widgets 的介绍:

Label(标签):QLabel 是用于显示文本或图片的简单控件。标签可以显示多行纯文本或富文本,还可以设置为响应用户的操作。

Text Browser(文本浏览器):QTextBrowser 是用于显示富文本文档的控件。这个部件可以显示来自本地文件或网络的HTML文档,并且可以解析HTML链接。

Graphics View(图形视图):QGraphicsView 是一个用于图形项(如线条、形状、图像等)交互的控件。它是基于场景(QGraphicsScene)和视图(QGraphicsView)框架的一部分,用于管理和显示复杂的图形界面。

Calendar Widget(日历):QCalendarWidget 继承 QWidget。QCalendarWidget 提供了一个月历视图,允许用户选择日期。这个控件显示一个一月的日历,用户可以浏览月份和年份。

LCD Number(液晶数字):QLCDNumber 继承 QFrame。QLCDNumber 控件显示一个带有液晶显示风格的数字。它常用于模拟液晶显示的计时器、计数器等。

Progress Bar(进度条):QProgressBar 继承 QWidget。QProgressBar 控件提供了一个水平或垂直的进度条。进度条可以用来显示任务的当前进度。

Horizontal Line(水平线)/ Vertical Line(垂直线):这些控件(QFrame)用于在用户界面中添加水平或垂直的分割线,通常用来分隔界面元素或区域。

OpenGL Widget(开放式图形库工具):QOpenGLWidget 提供了一个绘制 OpenGL 图形的控件。它可以用于集成 OpenGL 渲染管线到 Qt 应用程序中。

QQuick Widget(嵌入式 QML 工具):QQuickWidget 允许将基于 QML 的用户界面组件集成到 QWidget-based 应用程序中。这使得在传统的 Qt Widgets 应用中嵌入使用 QML 开发的现代、动态的用户界面成为可能。

2 如何使用Display Widgets部件

Chapter3 Qt自定义控件电池组件使用

原文链接:https://blog.csdn.net/m0_62599305/article/details/137993953

本文介绍了如何在Qt应用中使用Battery类创建自定义电池显示控件,包括基本用法、功能API(如设置电量、状态、颜色等)以及如何在QtDesigner中配置。通过示例代码展示了具体实现。

前言

Battery 类是一个自定义 Qt 控件,用于显示电池状态的图形化界面。通过 Battery 类,您可以轻松地在 Qt 应用程序中创建具有自定义外观的电池显示。下面我们将介绍如何使用 Battery 类以及其各种功能。

一、最基本的使用方法

首先,您需要在您的 Qt 项目中包含 Battery 类的头文件:

#include "Battery.h"

然后,您可以像使用任何其他 Qt 控件一样将 Battery 控件添加到您的 UI 中。例如,在您的 QMainWindow 或其他 QWidget 中添加一个 Battery 控件:

Battery *battery = new Battery(this);
battery->setGeometry(100, 100, 50, 20); // 设置电池控件的位置和大小
battery->setLevel(50); // 设置电量百分比为 50%
battery->setStatus(Battery::Discharging); // 设置电池状态为放电状态

这样,您就创建了一个基本的 Battery 控件,并设置了它的大小、位置、电量百分比和状态。

二、Battery 类的功能和 API

Battery 类提供了以下功能和 API:

设置和获取电量百分比:

  • void setLevel(int level):设置电池的电量百分比。

  • int level() const:获取电池的电量百分比。
    设置和获取电池状态:

  • void setStatus(BatteryStatus status):设置电池的状态,可以是放电、充电或充满状态。
    参数有下面的取值:
    在这里插入图片描述

  • BatteryStatus status() const:获取电池的当前状态。

设置和获取电池边框颜色:

  • void setBorderColor(const QColor &color):设置电池边框的颜色。

  • QColor borderColor() const:获取电池边框的颜色。

设置和获取电池内部填充颜色:

  • void setPaddingColor(const QColor &color):设置电池内部填充的颜色。

  • QColor paddingColor() const:获取电池内部填充的颜色。

设置和获取充电指示器颜色:

  • void setChargeColor(const QColor &color):设置充电指示器的颜色。

  • QColor chargeColor() const:获取充电指示器的颜色。

设置和获取低电量警告颜色:

  • void setLowBatteryColor(const QColor &color):设置低电量警告的颜色。

  • QColor lowBatteryColor() const:获取低电量警告的颜色。

设置和获取绘制偏移量:

  • void setOffset(const QPoint &offset):设置绘制偏移量,用于调整电量指示器的位置。

  • QPoint offset() const:获取绘制偏移量。

设置和获取电池外形是否为圆角:

  • void setRound(bool round):设置电池外形是否为圆角。

  • bool isRound() const:获取电池外形是否为圆角。

设置和获取圆角占电池高度的百分比:

  • void setRoundPresent(int roundPresent):设置圆角占电池高度的百分比,用于控制圆角的大小。

  • int roundPresent() const:获取圆角占电池高度的百分比。

三、Qt Desiner使用电池组件

在desiner选择电池组件:
在这里插入图片描述

在这里可以设置我们的一些属性,实现我们上面函数的功能
在这里插入图片描述

四、示例代码

下面是一个示例代码,演示了如何创建一个 Battery 控件并设置其各种属性:

#include <QApplication>
#include "Battery.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建主窗口
    QWidget mainWindow;
    mainWindow.setGeometry(100, 100, 300, 200);

    // 创建一个 Battery 控件
    Battery *battery = new Battery(&mainWindow);
    battery->setGeometry(50, 50, 100, 40);
    battery->setLevel(75); // 设置电量百分比为 75%
    battery->setStatus(Battery::Charging); // 设置电池状态为充电状态

    mainWindow.show();

    return a.exec();
}

通过以上步骤,您可以轻松地在您的 Qt 应用程序中使用 Battery 类,并根据需要自定义电池的外观和行为。

Chapter4 Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)

原文链接:https://blog.csdn.net/qq_41921826/article/details/136919332

Chapter5 QT开发实例之常用控件(上)

原文链接:https://blog.csdn.net/m0_53421868/article/details/127991232

设置窗口属性

为防止通过setWindowTitle 设置的窗口标题出现中文乱码的问题,需要将设置的参数进行一个转换,可以通过fromLocal8Bit 函数转换后就不会出现中文乱码的问题了。

learn::learn(QWidget *parent)
    : QMainWindow(parent)
    , bnt(nullptr)
{
    ui.setupUi(this);

    QString iconpath = "../Resource Files/WIN_20221114_17_56_03_Pro.jpg";
    //设置窗口标题
    setWindowTitle(QString::fromLocal8Bit("QT5.1窗口"));
    //设置窗口固定大小
    setMinimumSize(300, 300);
    setMaximumSize(300, 300);
    //设置窗口的背景颜色为红色
    this->setStyleSheet("background:red");
    //修改窗口的图标
    this->setWindowIcon(QIcon(iconpath));
}

字体形状窗体

将窗体背景色透明,根据图片形状显示窗体
在这里插入图片描述

void learn::SetLucency()
{
	//去掉标题栏
    this->setWindowFlags(Qt::FramelessWindowHint);
    //设置透明
    this->setAttribute(Qt::WA_TranslucentBackground, true);
    /*
		qss语句解释:
		background-image :背景图片
		url(xxx)   填写文件路径
		background-repeat:no-repeat;  不平铺
	*/
    this->setStyleSheet("background-image:url(C:/Users/26961/Desktop/1.png); background-repeat:no-repeat;");
}

Chapter6 用一个 QProgressBar 模拟手机电池充电

原文链接:https://blog.csdn.net/lengyuefeng212/article/details/119804536

1. 控件简介

QProgressBar 继承 QWidget。QProgressBar 小部件提供了一个水平或垂直的进度条。进度条用于向用户显示操作的进度,并向他们确认应用程序仍在运行。

2. 用法示例

例 25_qprogressbar,手机电池充电。用一个 QProgressBar 模拟手机电池充电。

在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可。项目新建完成如下图。
在这里插入图片描述

本例已经添加一张电池的背景图资源图片。添加完成如下图。
在这里插入图片描述

在头文件“mainwindow.h”具体代码如下。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProgressBar>
#include <QTimer>

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
/* 声明对象 */
QProgressBar *progressBar;
QTimer *timer;

/* 用于设置当前 QProgressBar 的值 */
int value;

private slots:
/* 槽函数 */
void timerTimeOut();

};
#endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
/* 设置主窗体位置与大小 */
this->setGeometry(0, 0, 800, 480);

progressBar = new QProgressBar(this);
progressBar->setGeometry(300, 200, 200, 60);

/*样式表设置,常用使用 setStyleSheet 来设置样式(实现界面美化的功能),
 * 具体可参考 styleSheet */
progressBar->setStyleSheet (
"QProgressBar{border:8px solid #FFFFFF;"
"height:30;"
"border-image:url(:/images/battery.png);" //背景图片
"text-align:center;" // 文字居中
"color:rgb(255,0,255);"
"font:20px;" // 字体大小为 20px
"border-radius:10px;}"
"QProgressBar::chunk{"
"border-radius:5px;" // 斑马线圆角
"border:1px solid black;" // 黑边,默认无边
"background-color:skyblue;"
"width:10px;margin:1px;}" // 宽度和间距
);

/* 设置 progressBar 的范围值 */
progressBar->setRange(0, 100);
/* 初始化 value 为 0 */
value = 0;
/* 给 progressBar 设置当前值 */
progressBar->setValue(value);
/* 设置当前文本字符串的显示格式 */
progressBar->setFormat("充电中%p%");

/* 定时器实例化设置每 100ms 发送一个 timeout 信号 */
timer = new QTimer(this);
timer->start(100);

/* 信号槽连接 */
connect(timer, SIGNAL(timeout()),this, SLOT(timerTimeOut()));
}

MainWindow::~MainWindow()
{
}

void MainWindow::timerTimeOut()
{
/* 定显示器时间到,value 值自加一 */
value ++;
progressBar->setValue(value);
/* 若 value 值大于 100,令 value 再回到 0 */
if(value>100)
value = 0;
}

在源文件“main.cpp”具体代码新建项目时生成,无改动。

3. 运行效果

程序编译运行的结果如下。程序运行后,可以看到在定时器的作用下,电池一直在充电,充到 100%,又重新回到 0%重新充电。QProgressBar 一般用于表示进度,常用于如复制进度,打开、加载进度等。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Navicat安装与连接教程

navicat 的安装 官网&#xff1a;https://www.navicat.com.cn/ 进入官网之后点击左上角的产品&#xff0c;然后往下滑动就可以看见许多类型&#xff0c;我们使用的是MongoDB数据库&#xff0c;所以就下载Navicat 17 for MongoDB 进入到这里之后&#xff0c;选择自己的系统版本…

基于Vue.js的电商前端模板:Vue-Dashboard-Template的设计与实现

摘要 随着电子商务的飞速发展&#xff0c;前端页面的设计和实现变得愈发重要。本文介绍了一个基于Vue.js的电商前端模板——Vue-Dashboard-Template&#xff0c;旨在提供一个高性能、易扩展的电商平台前端解决方案。该模板遵循响应式设计、模块化、组件化开发等设计原则&#…

使用python创建虚拟环境及exe打包

使用python创建虚拟环境及exe打包 使用python创建虚拟环境在虚拟环境使用PyQt进行exe封装 使用python创建虚拟环境 优点&#xff1a; &#xff08;1&#xff09;可以实现环境的即插即用&#xff08;2&#xff09;可以在使用pyqt打包时实现最小体积使用库——venv 进入你要创…

业务代码插件式开发实践

在学习编程初期&#xff0c;会接触到设计模式的概念&#xff1a;23种设计模式&#xff0c;单例模式&#xff0c;策略模式&#xff0c;… 。接触业务研发后&#xff0c;对设计模式的使用和实践有了更深的见解。 使用设计模式是目的为了更高效的支撑业务诉求&#xff0c;如何在保…

selenium4如何指定chrome和firefox的驱动(driver)路径

pythonpytestselenium框架的自动化测试脚本。 原本用的chrome&#xff0c;很久没用了&#xff0c;今天执行&#xff0c;发现chrome偷偷升级&#xff0c;我的chromedriver版本不对了。。。鉴于访问chrome相关网站太艰难&#xff0c;决定弃用chrome&#xff0c;改用firefox。因为…

基于SSM+Jsp的疫情居家办公OA系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

vue使用glide.js实现轮播图(可直接复制使用)

效果图 可以实现自动轮播&#xff0c;3种切换方式&#xff1a;直接滑动图片、点击两侧按钮、点击底部按钮 体验链接:http://website.livequeen.top 实现 一、引入依赖 1、控制台引入依赖 npm install glidejs/glide 2、在css中引用 <style scoped> import glidejs/g…

华为达芬奇与英伟达CUDA架构对比分析

华为达芬奇与英伟达CUDA&#xff0c;必有一战&#xff01; 大数据产业创新服务媒体 ——聚焦数据 改变商业 当初英特尔和微软&#xff0c;搞出来个Wintel&#xff0c;制霸电脑时代很多年。从某种意义上&#xff0c;英伟达的CUDA&#xff0c;就相当于CPU时代的windows&#x…

高性价比 ESP32 网络收音机:OLED 显示+编码器控制 (源码开源)

摘要: 本文将详细介绍如何使用 ESP32 开发板制作一个功能完备的网络收音机。我们将涵盖硬件选择、软件架构、网络连接、音频流解码、用户界面设计等方面&#xff0c;并提供完整的代码示例和详细的解释&#xff0c;帮助您轻松构建自己的网络收音机。 关键词: ESP32, 网络收音机…

Python | Leetcode Python题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; MX5000000 is_prime [1] * MX is_prime[0]is_prime[1]0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):#循环每次增加iis_prime[j] 0 class Solution:def countPrimes(self, n: int) -> int:return sum(is_prim…

前端通过ResizeObserver来监听dom大小动态渲染echarts

export const GlobalResizeObserver (function () {const ATTR_NAME global-resizeobserver-keyconst attrValueToCallback {}function antiShake(fn, delay, immediate false) {let timer null//不能用箭头函数return function () {//在时间内重复调用的时候需要清空之前…

Linux Vim最全面的教程

Linux Vim简介 Linux Vim 是一个高度可定制的文本编辑器&#xff0c;广泛用于 Linux 和类 Unix 系统中。它起源于 Vi&#xff0c;一个早期的 Unix 系统中的编辑器&#xff0c;Vim 是 "Vi IMproved"&#xff08;改进版 Vi&#xff09;的缩写。Vim 继承了 Vi 的许多特性…

理解论文笔记:基于贝叶斯网络和最大期望算法的可维护性研究

看了与上一篇研究方向一致的文章&#xff0c;上一篇19年的&#xff0c;这一篇22年的更新。若有侵权&#xff0c;请联系删除。 I. INTRODUCTION 介绍 主要介绍了使用贝叶斯网络和历史数据对无线传感器网络可维护性研究的重要性和必要性&#xff0c;并对下面的各章进行了…

为什么有的手机卡没有语音功能呢?

大家好&#xff0c;今天这篇文章为大家介绍一下&#xff0c;无通话功能的手机卡&#xff0c; 在网上申请过手机卡的朋友应该都知道&#xff0c;现在有这么一种手机卡&#xff0c;虽然是运营商推出的正规号卡&#xff0c;但是却屏蔽了通话功能&#xff0c;你知道这是为什么吗&am…

APP项目测试 之 APP功能测试

1. APP测试流程 需求评审——计划编写——用例设计——用例执行——缺陷管理——测试报告 2. APP测试内容 功能测试 专项测试 性能测试 3.注册测试点扩充 4.登录测试点扩充 5.购物车测试点扩充 6.搜索测试点扩充 7.支付测试点扩充 8.评论测试点扩充 未完待续。…

decode()方法——解码字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 解码是将字节流转换成字符串&#xff08;文本&#xff09;&#xff0c;其他编码格式转成unicode。在Python中提供了decode()方法&#xff0…

layui在表格中嵌入上传按钮,并修改上传进度条

当需要在表格中添加上传文件按钮&#xff0c;并不需要弹出填写表单的框的时候&#xff0c;需要在layui中&#xff0c;用按钮触发文件选择 有一点需要说明的是&#xff0c;layui定义table并不是在定义的标签中渲染&#xff0c;而是在紧接着的标签中渲染&#xff0c;所以要获取实…

小模型家族又新增成员Gemma2

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba&#xff0c;xLSTM,KAN&#xff09;则提供了大模…

java大型医院绩效考核系统源码(医院为什么需要绩效机制?)医院绩效考核系统源码 医院管理绩效考核系统源码

java大型医院绩效考核系统源码&#xff08;医院为什么需要绩效机制&#xff1f;&#xff09;医院绩效考核系统源码 医院管理绩效考核系统源码 医院作为提供医疗服务的核心机构&#xff0c;其运营和管理效率直接影响到患者的就医体验、治疗效果以及医院的长期发展。因此&#xf…

Java编写学籍信息管理系统,完整代码

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…