qt初入门5:字体设置和元对象系统的练习

空闲时间,参考课本demo,做一下练习。

字体的颜色主要用QPalette类,调色板的作用,控制着窗口部件的颜色和外观,包括背景色、前景色、文本颜色、边框颜色等。
字体的显示样式主要用Font类,用于管理字体。

元对象的使用(QObject派生类都具有与之相关联的元对象):
主要练习通过元对象系统,获取类名,属性等,这里可以设置一些类信息和属性信息,然后使用。

只贴出必要代码,其他的都是信号,槽,以及控件的基础使用。

在这里插入图片描述

1:主要是字体的处理。

这里测试时发现,TextEdit在设置字体斜体和粗体时,文本框中在ui上设置的文本无法生效,其他正常。

//字体颜色的控制
void Dialog::init()
{connect(ui->rb_red, SIGNAL(clicked()), this, SLOT(do_setFontColor()));connect(ui->rb_blue, SIGNAL(clicked()), this, SLOT(do_setFontColor()));connect(ui->rb_black, SIGNAL(clicked()), this, SLOT(do_setFontColor()));
}//Plain Text Edit 和TextEdit 一样
void Dialog::do_setFontColor()
{QPalette plet = ui->te_Display->palette();QPalette plet1 = ui->pte_Display->palette();if(ui->rb_red->isChecked()){plet.setColor(QPalette::Text, Qt::red);plet1.setColor(QPalette::Text, Qt::red);}else if(ui->rb_blue->isChecked()){plet.setColor(QPalette::Text, Qt::blue);plet1.setColor(QPalette::Text, Qt::blue);}else{plet.setColor(QPalette::Text, Qt::black);plet1.setColor(QPalette::Text, Qt::black);}ui->te_Display->setPalette(plet);ui->pte_Display->setPalette(plet1);
}//字体显示样式的控制   斜体和粗体类似  setItalic  setBold
void Dialog::on_cb_underline_clicked(bool checked)
{QFont font = ui->te_Display->font();font.setUnderline(checked); //其他可以参考ui->te_Display->setFont(font);QFont font1 = ui->te_Display->font();font1.setUnderline(checked); //其他可以参考ui->pte_Display->setFont(font1);
}

2:元对象系统的练习

2.1 设置必要的类信息

Q_CLASSINFO("author","han")
Q_CLASSINFO("company","UPC")
Q_CLASSINFO("version","1.0.0")

2.2 通过元对象系统QMetaObject获取对应的类信息:

QObject *obj=m_boy;
const QMetaObject *meta = obj->metaObject();
for (int i=meta->classInfoOffset();i<meta->classInfoCount();++i)
{QMetaClassInfo classInfo=meta->classInfo(i);ui->pte_Display->appendPlainText(QString("Name=%1; Value=%2").arg(classInfo.name()).arg(classInfo.value()));
}

2.3 设置必要的属性信息:

//属性信息 类型  名称  READ/GET 方法和 WRITE/SET 方法:指定获取和设置属性值的方法。可以使用 MEMBER、READ、WRITE、RESET 或 NOTIFY 关键字来定义这些方法。
Q_PROPERTY(int age READ getAge WRITE setAge NOTIFY ageChanged)
Q_PROPERTY(QString name MEMBER m_name); //属性对应成员
Q_PROPERTY(int score MEMBER m_score);
//需要有上面对应的成员变量m_name 和m_score  
//   以及上面提到的函数getAge   setAge(int value);   和信号函数: ageChanged(int value);

2.4:对应的属性信息赋值方法

//专门设计一个基于object的类TPerson   m_boy是对应的一个类对象
m_boy = new TPerson("小明", this); //这种设置父对象会由父对象释放?
m_boy->setAge(12);
//初始化  内部变量和界面要一致
ui->sb_boy_dis->setValue(22);//需要绑定槽函数  触发日志的打印
m_boy->setProperty("age", 22);
m_boy->setProperty("score", 22);
m_boy->setProperty("sex", "boy"); //动态的  connect(m_boy, SIGNAL(ageChanged(int)), this, SLOT(do_ageChanged(int)));
connect(m_gril, &TPerson::ageChanged, this, &Dialog::do_ageChanged);

2.5:通过property获取设置的对应属性

//即对应槽函数内部逻辑do_ageChanged(int value)
TPerson* person = qobject_cast<TPerson*>(sender());
QString his_name = person->property("name").toString();
QString his_sex = person->property("sex").toString();
int his_age = person->property("age").toInt();
int his_age1 = person->getAge();QString display = QString("%1,%2,年龄= %3,%4").arg(his_name).arg(his_sex).arg(his_age).arg(his_age1);
ui->te_Display->append(display);

2.6:通过元对象系统QMetaObject获取相关的属性

#include <QMetaProperty>
void Dialog::on_pbn_info_clicked()
{if(m_boy ==nullptr ||m_gril == nullptr){ui->pte_Display->setPlainText("成员对象为空,请先构造。");return;}QObject *obj=m_boy;const QMetaObject *meta = obj->metaObject();ui->pte_Display->setPlainText("类名称:"+QString(meta->className()));
//对应的属性信息ui->pte_Display->appendPlainText("property");
//    for (int i=0;i<meta->propertyCount();i++)for (int i=meta->propertyOffset();i<meta->propertyCount();i++){QMetaProperty property = meta->property(i);const char* propName = property.name();QString propValue=obj->property(propName).toString();QString str=QString("属性名称=%1,属性值=%2").arg(propName).arg(propValue);ui->pte_Display->appendPlainText(str);}
//对应的类信息ui->pte_Display->appendPlainText("");ui->pte_Display->appendPlainText("classInfo");for (int i=meta->classInfoOffset();i<meta->classInfoCount();++i){QMetaClassInfo classInfo=meta->classInfo(i);ui->pte_Display->appendPlainText(QString("Name=%1; Value=%2").arg(classInfo.name()).arg(classInfo.value()));}
}

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

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

相关文章

无限学模式-“重塑科研学习路径:ChatGPT应用实战课,开启高效率、高创新的科研之旅!“

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的…

【研0日记】24.01.25

回家倒数第6天 受不了了&#xff0c;不想写了&#xff0c;这群b怎么这么能写 用latex写了个伪代码&#xff0c;有点好玩 \usepackage[ruled,linesnumbered]{algorithm2e} \begin{algorithm}[ht] \caption{Pipeline of Kernel Iteration in K-Net.} \label{alg:alg1} …

在Java中如何优雅使用正则表达式?

在Java中如何优雅使用正则表达式&#xff1f; 一、正则表达式的基本概念与用途 1.1 正则表达式的简介 正则表达式&#xff0c;又称规则表达式。&#xff08;英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是计算…

深入理解badblocks

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、参数说明 四、实例4.1、全面扫描4.2、破坏性写入并修复4.3、非破坏性写入测试 五、实现原理六、注意事项 团队博客: 汽车电子社区 一、概述 badblocks命令是…

代码随想录算法训练营第十六天|104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度 思路&#xff1a;这道题最开始的时候&#xff0c;我想的是用前序遍历的思路来做&#xff0c;整个过程有剪枝的过程&#xff0c;弄了半天没写出来&#xff0c;主要是剪枝没写对&#xff01;最大深度是叶子节点的高度&#xff0c;可以使用后序遍历来做。 cl…

el-table 动态渲染多级表头;一级表头根据数据动态生成,二级表头固定

一、表格需求&#xff1a; 实现一个动态表头&#xff0c;一级表头&#xff0c;根据数据动态生成&#xff0c;二级表头固定&#xff0c;每列的数据不一样&#xff0c;难点在于数据的处理。做这种表头需要两组数据&#xff0c;一组数据是实现表头的&#xff0c;另一组数据是内容…

Web网页生成桌面应用

前言&#xff1a;网页生成桌面指的是将一个网页保存为桌面应用程序的形式&#xff0c;使得用户可以在桌面上直接打开该网页&#xff0c;而不必通过浏览器打开。这种桌面应用程序一般具有独立的窗口、菜单、工具栏等界面元素&#xff0c;能够提供更加方便快捷的使用体验。 实现…

【pytorch】pytorch学习笔记(续1)

p22&#xff1a;1.加减乘除&#xff1a; &#xff08;1&#xff09;add(a,b)&#xff1a;等同于ab。 &#xff08;2&#xff09;sub(a,b)&#xff1a;等同于a-b。 &#xff08;3&#xff09;mul(a,b)&#xff1a;等同于a*b。 &#xff08;4&#xff09;div(a,b)&#xff1a…

PID控制算法,带C语言源码实现

1 PID简介 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#xff09;、Differential&#xff08;微分&#xff09;的缩写。PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。PID算法是连续系统中技术最为成熟、应用最为…

gitlab runner 安装、注册、配置、使用(Docker部署)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【工具使用-Everything】everything只能搜到文件夹,无法搜到文件

一&#xff0c;问题现象 everything搜索时&#xff0c;只能搜索到文件夹&#xff0c;无法搜索到文件夹下的文件。 二&#xff0c;问题原因 everything搜索设置问题&#xff0c;设置为"文件夹"导致 三&#xff0c;解决方法 将搜索选项设置为“所有”即可&#x…

5 新增课程

5.1 需求分析 5.1.1 业务流程 根据前边对内容管理模块的数据模型分析&#xff0c;课程相关的信息有&#xff1a;课程基本信息、课程营销信息、课程图片信息、课程计划、课程师资信息&#xff0c;所以新增一门课程需要完成这几部分信息的填写。 以下是业务流程&#xff1a; …

全链路压测:提升业务可靠性和可用性

全链路压测是一种全面评估系统性能和稳定性的测试方法&#xff0c;通过模拟真实用户场景和流程来验证整个应用系统在高负载情况下的表现。全链路压测的主要作用涵盖了多个方面&#xff1a; 性能评估与优化&#xff1a; 全链路压测可以全面评估系统在高负载下的性能表现&#xf…

代码评审——随机数Random问题

问题描述&#xff1a; 为了获取唯一值&#xff0c;经常会依赖产生随机数来保证唯一性。在获取随机数时&#xff0c;如果使用错误的方法&#xff0c;会比较低效。 可以参考以下代码&#xff1a; public static String geneRundomNo(){Random rnew Random();int numr.nextInt(…

day31_CSS

今日内容 CSS概述引入方式 (where)选择器(how)属性(how) 1 CSS介绍 层叠样式表&#xff08;cascading style sheet&#xff09; CSS 用来美化HTML页面,可以让页面更好看,还可以布局页面. 好处 美化页面,布局页面使用外部css文件,可以实现样式文件和html文件分离,便于维护使用外…

5.ROC-AUC机器学习模型性能的常用的评估指标

最近回顾机器学习基础知识部分的时候&#xff0c;看到了用于评估机器学习模型性能的ROC曲线。再次记录一下&#xff0c;想起之前学习的时候的茫然&#xff0c;希望这次可以更加清晰的了解这一指标。上课的时候听老师提起过&#xff0c;当时没有认真去看&#xff0c;所以这次可以…

SpeechGPT-Gen;使用Agents编辑图像;多模态扩散模型图像生成

本文首发于公众号&#xff1a;机器感知 SpeechGPT-Gen&#xff1b;使用Agents编辑图像&#xff1b;多模态扩散模型图像生成&#xff1b; CCA: Collaborative Competitive Agents for Image Editing This paper presents a novel generative model, Collaborative Competitive…

多流转换 (分流,合流,基于时间的合流——双流联结 )

目录 一&#xff0c;分流 1.实现分流 2.使用侧输出流 二&#xff0c;合流 1&#xff0c;联合 2&#xff0c;连接 三&#xff0c;基于时间的合流——双流联结 1&#xff0c;窗口联结 1.1 窗口联结的调用 1.2 窗口联结的处理流程 2&#xff0c;间隔联结 2.1 间隔联…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测&#xff1f;1.2 需要评测什么&#xff1f;1.3 如何评测&#xff1f;1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…