元对象系统功能

news2024/9/24 13:21:32

元对象系统功能

在这里插入图片描述

建立工程
在这里插入图片描述
布局页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
布局页面
在这里插入图片描述
在这里插入图片描述
修改原件名称
在这里插入图片描述
建立元对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
函数作为接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

增加一些固定的属性
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#-------------------------------------------------
#
# Project created by QtCreator 2023-10-24T21:54:44
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = 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.0


SOURCES += \
        main.cpp \
        widget.cpp \
    tperson.cpp

HEADERS += \
        widget.h \
    tperson.h

FORMS += \
        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_OBJECT

public:
    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);
    else
        girl->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()));
    }
}

在这里插入图片描述

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

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

相关文章

LLM在text2sql上的应用 | 京东云技术团队

一、前言&#xff1a; 目前&#xff0c;大模型的一个热门应用方向text2sql它可以帮助用户快速生成想要查询的SQL语句。那对于用户来说&#xff0c;大部分简单的sql都是正确的&#xff0c;但对于一些复杂逻辑来说&#xff0c;需要用户在产出SQL的基础上进行简单修改&#xff0c…

金字塔切分注意力模块PSA学习笔记 (附代码)

已有研究表明&#xff1a;将注意力模块嵌入到现有CNN中可以带来显著的性能提升。比如&#xff0c;SENet、BAM、CBAM、ECANet、GCNet、FcaNet等注意力机制均带来了可观的性能提升。但是&#xff0c;目前仍然存在两个具有挑战性的问题需要解决。一是如何有效地获取和利用不同尺度…

主流电商平台价格如何高频监测

双十一来临在即&#xff0c;除了商家很兴奋&#xff0c;品牌和消费者同样持续关注&#xff0c;除了关注不同平台的产品上架情况&#xff0c;价格也是这些渠道参与者最为关注的&#xff0c;品牌需要通过掌握各店铺的价格情况&#xff0c;了解市场情况以及各经销商的渠道治理现状…

从零搭建一个PWA应用需要了解哪些知识

在国内由于小程序的风生水起&#xff0c;PWA 应用在国内的状况一直都不是很好&#xff0c;PWA 和小程序有很多的相似性&#xff0c;但是 PWA 是由谷歌发起的技术&#xff0c;小程序是微信发起的技术&#xff0c;所以小程序在国内得到了大力的扶持&#xff0c;很快就在国内技术界…

docker制作java项目镜像

docker制作java项目镜像 环境步骤Dockerfile 运行容器 环境 当前使用win10安装的docker win10安装Docker参考文章 步骤 将Dockerfile文件和jar包放在同一个目录下 编写Dockerfile文件 Dockerfile #设置镜像基础: jdk8-jre , 比jdk内存小 FROM java:8-jre #维护人员信息 MA…

众和策略可靠吗?dde大单净量可信吗?

可靠 DDE大单净量是指股票成交中的单笔生意量较大且净买入或净卖出的数量。这个方针在股票商场中被广泛运用&#xff0c;尤其是在技术剖析中。但是&#xff0c;有时候人们会怀疑DDE大单净量的可信度&#xff0c;下面我们从几个角度进行剖析。 首要&#xff0c;有些人以为DDE大…

持续性输出,继续推荐5款好用的软件

​ 分享是一种神奇的东西&#xff0c;它使快乐增大&#xff0c;它使悲伤减小&#xff0c;坚持分享一些好用的软件给大家&#xff0c;今天继续为大家带来五款好用的小软件。 1.文件解锁工具——Unlocker ​ Unlocker是一款解决Windows文件被占用无法删除或重命名的问题的小工具…

mysql数据库迁移达梦

迁移前准备&#xff1a; 授权给要迁移的数据库的用户&#xff0c;例如此时是 mysql迁移到达梦里面&#xff0c;所以得把你连接这个mysql数据库的这个用户root授权&#xff0c; CREATE USER root IDENTIFIED BY1123456;GRANT ALL privileges ON *.* TO rootroot WITH GRANT OPTI…

微信小程序菜单导航选中自动居中

菜单导航选中自动居中 示例库 代码片段

Qt之自定义事件QEvent

在Qt中,自定义事件的步骤大概如下: 1.创建自定义事件,自定义事件需要继承QEvent 2.使用QEvent::registerEventType()注册自定义事件类型,事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间,在QEvent::User之前是预留给系统的事件 3.使用sendEvent() 和 postEv…

迅为RK3399开发板Android 系统--打印级别设置(printk日志等级设置)

在内核源码 include/linux/kern_levels.h 文件中预定义了内核 log 等级&#xff0c;一共有八个等级&#xff0c;从 0 到 7&#xff0c;优先级依次降低&#xff0c;如下所示&#xff1a; // include/linux/kern_levels.h #define KERN_SOH "\001" /* ASCII Start Of…

Khronos: 面向万亿规模时间线的性能监控引擎建设实践

作者&#xff1a;余文清 阿里巴巴智能引擎事业部自研的 Khronos 系统是阿里内部接入规模最大的性能数据存储引擎。Khronos 支持动态生命周期的存储计算分离架构&#xff0c;采用 schemaless 的 data model 设计&#xff0c;在万亿数据规模下为业务提供易用、高效、经济的服务&a…

自媒体创业秘籍:视频号视频下载助你打造热门账号

​自媒体创业者们都知道&#xff0c;视频号已经成为拓展影响力和吸引更多用户的热门平台之一。然而&#xff0c;要想在这个竞争激烈的市场中脱颖而出&#xff0c;并打造一个热门账号&#xff0c;你需要掌握一些技巧和秘籍。在本文中&#xff0c;我将分享关于视频号视频下载的方…

ModelSim【紫光】

这软件是查看波形的。 如果ModelSim频繁弹窗&#xff0c;关闭电脑杀毒软件和电脑管家。 尤其是荣耀管家

Python学习8

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

UMMKD

方法 对于“Y”形模型&#xff0c;绿线之前的层是分开的&#xff0c;绿线之后的层在模态之间共享。对于“X”形模型&#xff0c;第一条蓝线之前和第二条蓝线之后的层是分开的&#xff0c;蓝线之间的层在模态之间共享 作者未提供数据

shell脚本中循环语句(极其粗糙版)

分界点&#xff1a;以下内容需要更改&#xff0c;正常放假更改 循环语句&#xff1a; 循环&#xff1a;重复执行一段代码的结构&#xff0c;通过循环&#xff0c;可以在满足一定的条件情况下&#xff0c;多次的执行相同的代码 循环包括&#xff1a;循环体以及循环条件&#…

第二证券:macd指标如何使用?

MACD方针是一种用于技术分析的方针&#xff0c;被广泛应用于股票、期货和外汇市场。本文将从什么是MACD&#xff0c;MACD的原理&#xff0c;怎样运用MACD和MACD的优缺点四个方面分析MACD方针怎样运用。 一、什么是MACD MACD是Moving Average Convergence Divergence的缩写&…

第二证券:股指预计维持蓄势震荡格局 关注证券、计算机设备等板块

第二证券指出&#xff0c;增发1万亿国债、自2000年以来首度年内调整预算传递财务积极发力的信号&#xff0c;估量会对四季度及明年GDP将产生显著带动作用&#xff0c;有利于股市整体情绪的提振。对于债市而言&#xff0c;在支撑信贷增加和实体经济批改的目标下&#xff0c;我们…