元对象系统功能
元对象系统功能

建立工程

布局页面






布局页面


修改原件名称

建立元对象








函数作为接口
















增加一些固定的属性








#-------------------------------------------------
#
# Project created by QtCreator 2023-10-24T21:54:44
#
#-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = sample_3
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cpp \tperson.cppHEADERS += \widget.h \tperson.hFORMS += \widget.ui
#ifndef TPERSON_H
#define TPERSON_H#include <QObject>class TPerson : public QObject
{Q_OBJECT//提示信息Q_CLASSINFO("author","wang")Q_CLASSINFO("company","UPC")Q_CLASSINFO("version","2.0.0")Q_PROPERTY(int age READ age WRITE setAge NOTIFY ageChanged)Q_PROPERTY(QString name MEMBER m_name)Q_PROPERTY(int score MEMBER m_score)
public:explicit TPerson(QString name,QObject *parent = nullptr);~TPerson();//定义函数接口--对接年龄属性int age();//读年龄void setAge(quint8 ageValue);//写年龄void incAge();//增加年龄signals:void ageChanged(int ageValue);//年龄改变时,触发的函数public slots:private://任务属性QString m_name;int m_age = 10;int m_score = 79;
};#endif // TPERSON_H
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class TPerson;//定义一个类namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private ://定义二个类指针TPerson *boy;TPerson *girl;
private slots://定义二个槽函数void do_ageChanged(int value);void do_spinChanged(int argl);void on_btnBoylnc_clicked();void on_btnGirlnc_clicked();void on_btnClear_clicked();void on_btnClassinfo_clicked();private:Ui::Widget *ui;
};#endif // WIDGET_H
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
#include "tperson.h"TPerson::TPerson(QString name,QObject *parent) : QObject(parent),m_name(name)
{}TPerson::~TPerson()
{qDebug("TPerson类的对象被删除");}int TPerson::age()
{return m_age;
}void TPerson::setAge(quint8 ageValue)
{if(m_age != ageValue){m_age = ageValue;emit ageChanged(m_age);}}void TPerson::incAge()
{++m_age;emit ageChanged(m_age);
}
#include "widget.h"
#include "ui_widget.h"
#include "tperson.h"
#include<QMetaProperty>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//初始化界面boy = new TPerson("小明",this);boy->setProperty("sex","boy");boy->setProperty("age",10);boy->setProperty("score",70);girl = new TPerson("小丽",this);girl->setProperty("sex","gril");girl->setAge(20);ui->spinBoy->setProperty("isBoy",true);ui->spinGirl->setProperty("isBoy",false);connect(boy,SIGNAL(ageChanged(int)),ui->spinBoy,SLOT(setValue(int)));connect(girl,SIGNAL(ageChanged(int)),ui->spinGirl,SLOT(setValue(int)));connect(boy,SIGNAL(ageChanged(int)),this,SLOT(do_ageChanged(int)));connect(girl,SIGNAL(ageChanged(int)),this,SLOT(do_ageChanged(int)));connect(ui->spinBoy,SIGNAL(valueChanged(int)),this,SLOT(do_spinChanged(int)));connect(ui->spinGirl,SIGNAL(valueChanged(int)),this,SLOT(do_spinChanged(int)));
}Widget::~Widget()
{delete ui;
}void Widget::do_ageChanged(int value)
{//Q_UNUSED(value);TPerson *person = qobject_cast<TPerson*>(sender());QString str = QString("name=%1,sex=%2,年龄=%3").arg(person->property("name").toString()).arg(person->property("sex").toString()).arg(value);ui->plainTextEdit->appendPlainText(str);
}void Widget::do_spinChanged(int argl)
{//Q_UNUSED(argl);QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());if(spinBox->property("isBoy").toBool())boy->setAge(argl);elsegirl->incAge();
}void Widget::on_btnBoylnc_clicked()
{boy->incAge();
}void Widget::on_btnGirlnc_clicked()
{girl->incAge();
}void Widget::on_btnClear_clicked()
{ui->plainTextEdit->clear();
}void Widget::on_btnClassinfo_clicked()
{const QMetaObject *meta = boy->metaObject();ui->plainTextEdit->appendPlainText(QString("类名称:%1\n").arg(meta->className()));ui->plainTextEdit->appendPlainText("属性:");for(int i = meta->propertyOffset();i < meta->propertyCount();i++){const char *proName = meta->property(i).name();QString propValue = boy->property(proName).toString();ui->plainTextEdit->appendPlainText(QString("属性名称=%1,属性值=%2").arg(proName).arg(propValue));}ui->plainTextEdit->appendPlainText("\n类信息(classInfo):");for(int i = meta->propertyOffset();i < meta->propertyCount();i++){QMetaClassInfo classInfo = meta->classInfo(i);ui->plainTextEdit->appendPlainText(QString("Name=%1,value=%2").arg(classInfo.name()).arg(classInfo.value()));}
}

相关文章:
元对象系统功能
元对象系统功能 建立工程 布局页面 布局页面 修改原件名称 建立元对象 函数作为接口 增加一些固定的属性 #------------------------------------------------- # # Project created by QtCreator 2023-10-24T21:54:44 # #----------------------------…...
【2024秋招】小米中间件后端开发一面2023-9-13-base武汉
1 自我介绍 2 快手实习 2.1 讲讲你写的curd启动器,做了哪些工作呢 答: 2.2 网上也有一些开源的curd代码生成器,你为什么需要自研呢(重要) 答: (1)这个必须得自研,因…...
SpringMVC Day 01:入门案例
前言 在我们的日常工作和学习中,Web 开发是一个无法回避的重要环节。而在 Java Web 开发领域,SpringMVC 无疑是一个重量级选手。它以其灵活性、强大功能和清晰的 MVC 结构,赢得了大量开发者的青睐。但是,对于初学者来说ÿ…...
docker、docker-compose安装教程,很详细
docker、docker-compose安装教程,很详细 一、卸载旧版1、查看有没有安装过旧版2、停止docker3、删除安装过docker的相关包4、删除docker相关的镜像和容器 二、docker安装1、设置阿里云镜像2、查看所有docker3、安装最新版本4、安装指定版本 三、使用前准备1、启动do…...
源代码转换:Tangible Software Solutions 23.10 Crack
Tangible Software Solutions The Most Accurate and Reliable Source Code Converters Convert between C#, Java, C, Python, & VB, while saving countless hours of painstaking work and valuable time.源代码转换 Key Benefits Saves valuable time Accurate and com…...
SAD notes
ESKF 总结 prediction 更新误差先验 F F F通过3.42来算 得到 这里有点绕的一点是: 误差状态的 F F F牵涉到名义状态, 而名义状态又需要在时间上推进更新 其中, F中的名义状态的推进通过公式3.41得到, (名义状态不考虑误差, 这一点从3.41d, 3.41e可以看出, 误差状态只考虑…...
[SQL开发笔记]BETWEEN操作符:选取介于两个值之间的数据范围内的值
一、功能描述: BETWEEN操作符:选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。 二、BETWEEN操作符语法详解: BETWEEN操作符语法: SELECT column1, column2,…FROM table_nameWHERE column BETWEEN val…...
Babylonjs学习笔记(三)——创建天空盒
书接上回,这里讨论创建天空盒!!! // 天空盒const envTex CubeTexture.CreateFromPrefilteredData(./env/environmentSpecular.env,scene)scene.environmentTexture envTex;scene.createDefaultSkybox(envTex,true)scene.environ…...
【计算机网络】文件传输协议FTP和SFTP
1. 介绍 SFTP(SSH文件传输协议)和FTP(文件传输协议)都是用于在计算机之间传输文件的网络协议。FTP和SFTP都位于OSI模型中的应用层。这两种协议用于文件传输和管理,是应用层协议,因此它们工作在OSI模型的最…...
Python 编程语言的介绍
Python 是一种高级、动态类型的解释型语言。由 Guido van Rossum 于1989年底发明,并在1991年首次发布。Python 的设计哲学强调代码的可读性和简洁的语法,特别是使用缩进来表示代码块,这使得开发者能够用更少的代码表达想法。 基础概念: 语法…...
centos服务器搭建安装Gitlab教程使用教程
1、更新服务器: sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例,在服务器中,下载centos8的…...
linux复习笔记02(小滴课堂)
linux下输入输出错误重定向: 输入重定向:< 一个大于号是进行了覆盖。 两个大于号是追加。 输出重定向可以用于以后日志打印。 错误重定向: 错误重定向是不把信息打印到屏幕上而是打印到指定文件中去: 输出重定向其实是用的1…...
AWVS漏洞扫描使用基础与介绍
漏洞扫描的基本概念和原理 漏洞扫描是指通过使用自动化工具和技术来检测和识别计算机系统和网络中可能存在的安全漏洞,用于帮助网络安全运维人员及时获取网络安全态势。漏洞扫描是网络安全中的重要环节,它可以帮助我们发现和修复网络中的安全漏洞&#x…...
Flink 维表关联
1、实时查询维表 实时查询维表是指用户在 Flink 算子中直接访问外部数据库,比如用 MySQL 来进行关联,这种方式是同步方式,数据保证是最新的。但是,当我们的流计算数据过大,会对外 部系统带来巨大的访问压力࿰…...
阳光蟹场小程序的盈利模式与思考深度
随着移动互联网的快速发展,小程序成为了各行各业进行数字化转型的重要工具之一。阳光蟹场小程序作为一款专为蟹场管理和销售提供支持的移动,其盈利模式也备受关注。本文将从阳光蟹场小程序的盈利途径、商业模式和对蟹场管理的影响等方面,深入…...
2-Java进阶知识总结-7-UDP-TCP
文章目录 网络编程概述网络编程三要素--IP地址IP地址--概念(IP:Internet Protocol)IP地址--分类IP地址--特殊的地址:127.0.0.1IP地址获取--DOS命令IP地址获取--InetAddress类 网络编程三要素--端口端口--概念端口号 网络编程三要素…...
C++数据结构X篇_19_排序基本概念及冒泡排序(重点是核心代码,冒泡是稳定的排序)
文章目录 1. 排序基本概念2. 冒泡排序2.1 核心代码2.2 冒泡排序代码2.3 查看冒泡排序的时间消耗2.4 冒泡排序改进版减小时间消耗 1. 排序基本概念 现实生活中排序很重要,例如:淘宝按条件搜索的结果展示等。 概念 排序是计算机内经常进行的一种操作,其目…...
工作:三菱伺服驱动器连接参数及其电机钢性参数配置与调整
工作:三菱伺服驱动器参数及电机钢性参数配置与调整 一、三菱PLC与伺服驱动器连接参数的设置 1. 伺服配置 单个JET伺服从站链接侧占用点数:Rx/Ry占用64点、RWw/RWr占用32点 图中配置了22个JET伺服从站,占用点数:Rx/Ry占用64222048点、RWw/RWr占用322…...
企事业单位/公司电脑文件透明加密保护 | 防泄密软件\系统!
推荐——「天锐绿盾电脑文件防泄密系统」 一款全面的企业/公司数据透明加密防泄密系统,旨在从源头上保障数据的安全和使用安全。 PC访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 它具有以下特点:…...
[Leetcode] 0101. 对称二叉树
101. 对称二叉树 题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示&#…...
别再只会下载安装包了!手把手教你从源码编译最新版kkFileView(附避坑指南)
从源码构建kkFileView:解锁定制化文件预览的完整指南 在当今数字化办公环境中,文件预览功能已成为各类系统的标配需求。虽然官方提供的预编译安装包能够快速部署,但对于追求最新特性、需要深度定制或有私有化部署需求的技术团队而言ÿ…...
革命性本地AI聊天应用ChatRTX:基于TensorRT-LLM和RAG的完整指南
革命性本地AI聊天应用ChatRTX:基于TensorRT-LLM和RAG的完整指南 【免费下载链接】trt-llm-rag-windows 项目地址: https://gitcode.com/gh_mirrors/tr/trt-llm-rag-windows ChatRTX是一款革命性的本地AI聊天应用程序,它基于NVIDIA的TensorRT-LLM…...
MODSERIAL:嵌入式UART高可靠缓冲与事件驱动库
1. MODSERIAL:面向嵌入式实时系统的高可靠性串行通信缓冲库MODSERIAL 是一个专为 ARM Cortex-M 系列微控制器(尤其是基于 mbed OS 和 STM32 HAL 生态)设计的轻量级、中断安全、线程安全的串行通信增强库。其核心目标并非替代标准 HAL_UART 或…...
5B00,5B01,5B02,1700,1701,1702,1704,P07清零软件G3800,TS3480 ,TS3380 ,G3000,G1810,TS9020, TS8020,TS3480秒修复
下载地址:链接:https://pan.baidu.com/s/1j7Nwv715wX1JL3qidnGyXA?pwd0000 提取码:0000 常见 佳能打印机 型号: G5080 G6080 G7080 G1810 G2810 G3810 G4810 G1800 G2800 G3800 G4800 G5010 G6010 G7010 G1010 G2010 G3010 G4010 G1000 G2000 G3000 G40…...
Python箱线图实战:从原理到自定义异常值边界
1. 箱线图的核心原理与构成要素 箱线图(Box Plot)是数据分析中最实用的可视化工具之一,它用五个关键数值概括一组数据的分布特征。很多初学者容易把箱线图的上下边缘误解为数据集的最大最小值,这其实是个常见误区。让我用一个实际…...
League Akari:英雄联盟终极智能助手完整使用指南
League Akari:英雄联盟终极智能助手完整使用指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否厌倦了在英雄联…...
3步掌握BilibiliDown:从视频下载到音频提取的完整攻略
3步掌握BilibiliDown:从视频下载到音频提取的完整攻略 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/b…...
Excel报表自动化:用JXLS实现动态数据填充的5个高级技巧
Excel报表自动化:用JXLS实现动态数据填充的5个高级技巧 每次看到同事手动复制粘贴数据到Excel模板时,我都忍不住想分享JXLS这个神器。作为Java开发者,我们完全可以用代码实现专业级报表自动化,告别重复劳动。本文将带你深入JXLS的…...
避坑指南:STM32输入捕获测量PWM时,如何处理计数器溢出的3种方案
STM32输入捕获测量PWM时的计数器溢出处理方案实战解析 在嵌入式系统开发中,精确测量PWM信号的频率和占空比是常见需求。STM32系列微控制器的输入捕获功能为此提供了硬件支持,但当PWM周期较长或测量高分辨率信号时,定时器计数器(CNT)溢出问题往…...
DeepSeek-Coder-V2:开源代码助手如何超越商业模型实现90%代码生成准确率?
DeepSeek-Coder-V2:开源代码助手如何超越商业模型实现90%代码生成准确率? 【免费下载链接】DeepSeek-Coder-V2 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 还在为代码编写效率低下而苦恼吗?作为开发者的你…...
