#include "widget.h"
#include "ui_widget.h"
#include <QSpinBox>
#include "qperson.h"
#include <QTextEdit>
#include <QMetaProperty>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
//构造函数
ui->setupUi(this);
boy=new qperson("王明");
boy->setProperty("score",95);
boy->setProperty("age",10);
boy->setProperty("sex","Boy");//动态属性
// connect(boy,SIGNAL(ageChanged(int)),this,SLOT(on_ageChanged(int)));
connect(boy,&qperson::ageChanged,this,&Widget::on_ageChanged);
girl=new qperson("张丽");
girl->setProperty("score",81);
girl->setProperty("age",20);
girl->setProperty("sex","Girl");//动态属性
connect(girl,&qperson::ageChanged,this,&Widget::on_ageChanged);
ui->spinBoy->setProperty("isBoy",true); //动态属性
ui->spinGirl->setProperty("isBoy",false);
// 不能使用此形式,因为QSpinBox有两种参数形式的valueChanged()信号
// connect(ui->spinGirl,&QSpinBox::valueChanged,
// this,&QmyWidget::on_spinBoy_valueChanged);
connect(ui->spinGirl,SIGNAL(valueChanged(int)),
this,SLOT(on_spin_valueChanged(int)));
connect(ui->spinBoy,SIGNAL(valueChanged(int)),
this,SLOT(on_spin_valueChanged(int)));
}
Widget::~Widget()
{
delete ui;
}
//获取不同对象对应的属性值,并显示在textEdit上
void Widget::on_ageChanged(int value)
{
//响应QPerson的ageChanged()信号
Q_UNUSED(value);
qperson *aPerson = qobject_cast<qperson *>(sender()); //类型投射
QString hisName=aPerson->property("name").toString(); //姓名
// QString hisName=aPerson->name(); //获取姓名,错误
QString hisSex=aPerson->property("sex").toString(); //动态属性
int hisAge=aPerson->age();//通过接口函数获取年龄
// int hisAge=aPerson->property("age").toInt();//通过属性获得年龄
ui->textEdit->appendPlainText(hisName+","+hisSex
+QString::asprintf(",age=%d",hisAge));
}
void Widget::on_spin_valueChanged(int arg1)
{
//响应界面上spinBox的valueChanged(int)信号
Q_UNUSED(arg1);
QSpinBox *spinBox = qobject_cast<QSpinBox *>(sender());
if (spinBox->property("isBoy").toBool())
boy->setAge(spinBox->value());
else
girl->setAge(spinBox->value());
}
void Widget::on_btnClear_clicked()
{
//"清空文本框"按钮
ui->textEdit->clear();
}
void Widget::on_btnBoyInc_clicked()
{
//"boy长大一岁"按钮
boy->incAge();
}
void Widget::on_btnGirlInc_clicked()
{
//"girl长大一岁"按钮
girl->incAge();
}
void Widget::on_btnClassInfo_clicked()
{
//"类的元对象信息"按钮,显示的时类的信息,不管是boy或者girl都是可以的
// const QMetaObject *meta=boy->metaObject();
const QMetaObject *meta=girl->metaObject(); //获取元对象
// const QMetaObject *meta=ui->spinBoy->metaObject();
ui->textEdit->clear();
ui->textEdit->appendPlainText("==元对象信息==\n");
ui->textEdit->appendPlainText(QString("类名称: %1\n").arg(meta->className()));
ui->textEdit->appendPlainText("property");
for (int i=meta->propertyOffset();i<meta->propertyCount();i++)
{
const char* propName=meta->property(i).name();
ui->textEdit->appendPlainText(
QString("属性名称=%1,属性值=%2").arg(propName).arg(boy->property(propName).toString()));
}
ui->textEdit->appendPlainText("");
ui->textEdit->appendPlainText("classInfo");
for (int i=meta->classInfoOffset();i<meta->classInfoCount();++i)
{
QMetaClassInfo classInfo=meta->classInfo(i);
ui->textEdit->appendPlainText(
QString("Name=%1; Value=%2").arg(classInfo.name()).arg(classInfo.value()));
}
}
xia夏小优
- 粉丝: 181
- 资源: 20
最新资源
- 服装销售平台源代码.zip
- 高校心理教育辅导设计与实现.zip
- 服装生产管理系统源代码.zip
- 3b123中学生日常行为评分管理系统_springboot+vue.zip
- 3b125流浪狗领养管理_springboot+vue.zip
- 3b124电影推荐系统_springboot+vue.zip
- 购物推荐网站源代码.zip
- 技术交流和分享平台源代码.zip
- 基于B2B平台的医疗病历交互系统源代码.zip
- 3b127旅游网站设计_springboot+vue0.zip
- 3b126小说网站系统_springboot+vue.zip
- 教师工作量管理系统源代码.zip
- 俱乐部管理系统源代码.zip
- 兼职网源代码.zip
- 美容院管理系统源代码.zip
- 旅游网站源代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈