#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()));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt 5.9 C++开发指南-Qt核心特点源码
共8个文件
cpp:3个
h:2个
pro:1个
需积分: 1 8 下载量 92 浏览量
2023-09-16
19:31:43
上传
评论
收藏 6KB RAR 举报
温馨提示
Qt 5.9 C++开发指南-Qt核心特点源码
资源推荐
资源详情
资源评论
收起资源包目录
Qtsample_3_1.rar (8个子文件)
Qtsample_3_1
widget.ui 2KB
widget.cpp 4KB
qperson.h 880B
Qtsample_3_1.pro.user 72KB
main.cpp 305B
qperson.cpp 410B
widget.h 674B
Qtsample_3_1.pro 664B
共 8 条
- 1
资源评论
xia夏小优
- 粉丝: 147
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功