#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//初始化
boy = new QPerson("张三",11,90);
girl= new QPerson("小红",21,100);
ui->boyBox->setValue(boy->age());
ui->girlBox->setValue(girl->age());
//当调用person->setAge(),会发出ageChanged函数,执行on_ageChanged()槽函数,输出成员信息
connect(boy,&QPerson::ageChanged,this,&Widget::on_ageChanged);
connect(girl,&QPerson::ageChanged,this,&Widget::on_ageChanged);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_clearButton_clicked()
{
ui->plainTextEdit->clear();
}
//男孩长一岁
void Widget::on_boyButton_clicked()
{
boy->incAge();
ui->boyBox->setValue(boy->age());
}
//女孩长一岁
void Widget::on_girlButton_clicked()
{
girl->incAge();
ui->girlBox->setValue(girl->age());
}
void Widget::on_boyBox_valueChanged(int arg1)
{
boy->setAge(arg1);
}
void Widget::on_girlBox_valueChanged(int arg1)
{
girl->setAge(arg1);
}
//自定义的槽函数
void Widget::on_ageChanged()
{
//显示成员信息
QPerson *aPerson=qobject_cast<QPerson *>(sender());
QString aName=aPerson->property("name").toString();
unsigned aAge=aPerson->age();
int aSorce=aPerson->property("score").toInt();
ui->plainTextEdit->appendPlainText(aName+
QString::asprintf(",年龄=%d,成绩=%d",aAge,aSorce));
}
void Widget::on_classInfoButton_clicked()
{
const QMetaObject *meta=boy->metaObject();
ui->plainTextEdit->clear();
ui->plainTextEdit->appendPlainText("==元对象信息==");
ui->plainTextEdit->appendPlainText(
QString("类命名:%1\n").arg(meta->className()));
ui->plainTextEdit->appendPlainText("property");
for(int i=meta->propertyOffset();i<meta->propertyCount();i++){
QMetaProperty prop=meta->property(i);
const char *propName=prop.name();
QString propValue=boy->property(propName).toString();
ui->plainTextEdit->appendPlainText(
QString("属性名称:%1,属性值:%2").arg(propName).arg(propValue));
}
ui->plainTextEdit->appendPlainText("");
ui->plainTextEdit->appendPlainText("classInfo");
for(int i=meta->classInfoOffset();i<meta->classInfoCount();i++){
QMetaClassInfo classInfo=meta->classInfo(i);
ui->plainTextEdit->appendPlainText(
QString("Name=%1,Value=%2").arg(classInfo.name()).arg(classInfo.value()));
}
}
评论0