当前位置: 首页 > news >正文

知名企业网站搭建品牌免费seo排名网站

知名企业网站搭建品牌,免费seo排名网站,wordpress主题添加设置,做技术网站在背景图1 介绍 Qt中的属性系统是用于为对象添加自定义属性并管理这些属性的一种机制。它允许开发者在不修改类定义的情况下,动态地为Qt对象添加新的属性,并且能够对这些属性进行读取、设置和监听。 属性系统在Qt中是通过Q_PROPERTY宏和QObject的元对象系统来实现…

1 介绍

        Qt中的属性系统是用于为对象添加自定义属性管理这些属性的一种机制。它允许开发者在不修改类定义的情况下,动态地为Qt对象添加新的属性,并且能够对这些属性进行读取设置监听

        属性系统在Qt中是通过Q_PROPERTY宏QObject的元对象系统来实现的。开发者可以通过在QObject派生类中使用Q_PROPERTY宏,将新的属性添加到对象中,并为这些属性定义读取(getter)和设置(setter)方法。

1.1 主要作用总结

        a)自定义属性:通过属性系统,开发者可以向Qt对象中添加自定义的属性,以便存储和访问特定的数据。

        b)属性读写:属性系统允许开发者为属性定义读取和设置方法,使得外部代码可以读取和修改对象的属性值。

        c)属性通知:当属性的值发生变化时,属性系统可以发出信号通知其他代码,从而实现属性的监听和响应。

        d)Qt的元对象系统:属性系统是建立在Qt的元对象系统之上的,这使得属性可以在运行时进行反射操作,比如查询对象的属性列表、获取属性的类型等。

1.2 使用步骤

        步骤1:在QObject派生类中定义属性

        首先,在QObject派生类中使用`Q_PROPERTY`宏来定义属性。`Q_PROPERTY`宏的语法如下:

 Q_PROPERTY(type name(READ getFunction [WRITE setFunction] |MEMBER memberName [(READ getFunction | WRITE setFunction)])[RESET resetFunction][NOTIFY notifySignal][REVISION int | REVISION(int[, int])][DESIGNABLE bool][SCRIPTABLE bool][STORED bool][USER bool][BINDABLE bindableProperty][CONSTANT][FINAL][REQUIRED])

        其中,`type`是属性的数据类型,`name`是属性的名称,`getFunction `是读取属性值的方法,`setFunction`是设置属性值的方法,`notifySignal`是当属性值发生变化时发送的信号。

        例如,定义一个名为`myProperty`的属性,数据类型为`int`:

```cpp
class MyObject : public QObject
{Q_OBJECTQ_PROPERTY(int myProperty READ getMyProperty WRITE setMyProperty NOTIFY myPropertyChanged)public:int getMyProperty() const;void setMyProperty(int value);signals:void myPropertyChanged();
};
```

        步骤2:实现属性的读取和设置方法

        接下来,在类的实现文件中实现属性的读取和设置方法:

```cpp
int MyObject::getMyProperty() const
{return m_myProperty;
}void MyObject::setMyProperty(int value)
{if (m_myProperty != value) {m_myProperty = value;emit myPropertyChanged();}
}
```

        步骤3:连接属性变化信号到槽函数(可选)

        如果希望在属性值发生变化时执行一些操作,可以将属性变化信号连接到槽函数:

```cpp
MyObject obj;
connect(&obj, &MyObject::myPropertyChanged, someSlotFunction);
```

        步骤4:使用属性

```cpp
obj.setMyProperty(42);
int value = obj.getMyProperty();
```

        属性系统提供了可以像操作普通的数据成员一样操作这些自定义属性的方法,同时也可以利用Qt的信号槽系统来监听属性值的变化。这为Qt对象的数据管理提供了一种便捷的方式,并且使得代码更加灵活和可维护。

2 Q_PROPERTY与Meta_Object_system(元对象系统)使用示例

        tperson.h:

#ifndef TPERSON_H
#define TPERSON_H#include <QObject>class TPerson : public QObject
{Q_OBJECTQ_CLASSINFO("author", "luo")Q_CLASSINFO("institution", "Foreland")Q_CLASSINFO("version", "0.10")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 age);//设置年龄void increaseAge();  //增加年龄
signals:void ageChanged(int ageValue);
private:QString m_name;int m_age=10;int m_score=79;
};#endif // TPERSON_H

        tperson.cpp:

#include "tperson.h"TPerson::TPerson(QString name, QObject *parent):QObject{parent}, m_name{name}
{
//    this->m_name = name;
}TPerson::~TPerson()
{qDebug("TPerson对象被删除");
}int TPerson::age()
{return m_age;
}void TPerson::setAge(quint8 ageValue)
{if(ageValue != m_age){m_age = ageValue;emit ageChanged(m_age);}}void TPerson::increaseAge()
{++m_age;emit this->ageChanged(m_age);
}

       widget.h:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "tperson.h"
#include <QMetaProperty>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;TPerson *boy;TPerson *girl;
private slots:void do_ageChanged(int value);void do_spinChanged(int arg1);void on_growAYearBoy_clicked();void on_growAYearGirl_clicked();void on_pushButton_4_clicked();void on_showMetaInfo_clicked();void on_showMetaInfoGirl_clicked();
};
#endif // WIDGET_H

        widget.cpp:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);boy = new TPerson("傲天",this);girl = new TPerson("夙玉",this);//动态属性定义boy->setProperty("sex", "boy");girl->setProperty("sex", "girl");boy->setAge(15);girl->setAge(20);ui->spinBoxBoy->setProperty("isBoy", true);ui->spinBoxGirl->setProperty("isBoy", false);connect(boy, SIGNAL(ageChanged(int)), ui->spinBoxBoy, SLOT(setValue(int)));connect(girl, SIGNAL(ageChanged(int)), ui->spinBoxGirl, 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->spinBoxBoy, SIGNAL(valueChanged(int)), this, SLOT(do_spinChanged(int)));connect(ui->spinBoxGirl, SIGNAL(valueChanged(int)), this, SLOT(do_spinChanged(int)));
}Widget::~Widget()
{delete ui;
}void Widget::do_ageChanged(int value)
{//先用sender查看信号的发送者TPerson *person = qobject_cast<TPerson *>(sender());//获取年龄并打印到ptext中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 arg1)
{
//    Q_UNUSED(arg1)QSpinBox *spBox = qobject_cast<QSpinBox*>(sender());//这里的sender指信号的发送者,在connect函数中,sender肯定是一个QSpinBox对象if(spBox->property("isBoy").toBool())boy->setAge(arg1);elsegirl->setAge(arg1);
}void Widget::on_growAYearBoy_clicked()
{boy->increaseAge();
}void Widget::on_growAYearGirl_clicked()
{girl->increaseAge();
}void Widget::on_pushButton_4_clicked()
{ui->plainTextEdit->clear();
}void Widget::on_showMetaInfo_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* propName = meta->property(i).name();QString propValue = boy->property(propName).toString();ui->plainTextEdit->appendPlainText(QString("属性名称=%1,属性值=%2").arg(propName).arg(propValue));}ui->plainTextEdit->appendPlainText("\n类信息(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()));}
}void Widget::on_showMetaInfoGirl_clicked()
{const QMetaObject *meta = girl->metaObject();ui->plainTextEdit->appendPlainText(QString("类名称:%1\n").arg(meta->className()));ui->plainTextEdit->appendPlainText("属性:");for(int i=meta->propertyOffset();i<meta->propertyCount();i++){const char* propName = meta->property(i).name();QString propValue = girl->property(propName).toString();ui->plainTextEdit->appendPlainText(QString("属性名称=%1,属性值=%2").arg(propName).arg(propValue));}ui->plainTextEdit->appendPlainText("\n类信息(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()));}
}

        界面展示:

 


文章转载自:
http://promontoried.spbp.cn
http://casualize.spbp.cn
http://damocles.spbp.cn
http://grocery.spbp.cn
http://dangle.spbp.cn
http://puissant.spbp.cn
http://bridewell.spbp.cn
http://collegian.spbp.cn
http://newsmaker.spbp.cn
http://overcrop.spbp.cn
http://kasbah.spbp.cn
http://wirepuller.spbp.cn
http://adenoid.spbp.cn
http://highwood.spbp.cn
http://epidemic.spbp.cn
http://futures.spbp.cn
http://metallise.spbp.cn
http://brace.spbp.cn
http://microsporidian.spbp.cn
http://ovulary.spbp.cn
http://aerarium.spbp.cn
http://institution.spbp.cn
http://sitophobia.spbp.cn
http://overdub.spbp.cn
http://coliphage.spbp.cn
http://coromandel.spbp.cn
http://gnarl.spbp.cn
http://masque.spbp.cn
http://tomium.spbp.cn
http://modacrylic.spbp.cn
http://pursuit.spbp.cn
http://putative.spbp.cn
http://aerocamera.spbp.cn
http://chesterfield.spbp.cn
http://microgamete.spbp.cn
http://chauffeur.spbp.cn
http://kultur.spbp.cn
http://stolen.spbp.cn
http://contango.spbp.cn
http://fashionmonger.spbp.cn
http://returned.spbp.cn
http://litchi.spbp.cn
http://pandy.spbp.cn
http://wimble.spbp.cn
http://foully.spbp.cn
http://underwritten.spbp.cn
http://renitency.spbp.cn
http://maidservant.spbp.cn
http://sheugh.spbp.cn
http://mile.spbp.cn
http://rattling.spbp.cn
http://coffeepot.spbp.cn
http://galvanoscope.spbp.cn
http://activable.spbp.cn
http://naziism.spbp.cn
http://tailcoat.spbp.cn
http://powder.spbp.cn
http://benefit.spbp.cn
http://coloratura.spbp.cn
http://retain.spbp.cn
http://gore.spbp.cn
http://testimonial.spbp.cn
http://hippophagistical.spbp.cn
http://meeken.spbp.cn
http://succession.spbp.cn
http://clayware.spbp.cn
http://submaster.spbp.cn
http://heterosex.spbp.cn
http://leucosis.spbp.cn
http://illumination.spbp.cn
http://statewide.spbp.cn
http://mahout.spbp.cn
http://commy.spbp.cn
http://superhelical.spbp.cn
http://prudish.spbp.cn
http://chastise.spbp.cn
http://featheriness.spbp.cn
http://bathsheba.spbp.cn
http://lipotropism.spbp.cn
http://hydrostatics.spbp.cn
http://gemstone.spbp.cn
http://cantonment.spbp.cn
http://hippology.spbp.cn
http://pall.spbp.cn
http://alterne.spbp.cn
http://loungewear.spbp.cn
http://kop.spbp.cn
http://ferdus.spbp.cn
http://latticinio.spbp.cn
http://filtrate.spbp.cn
http://remeasure.spbp.cn
http://yawl.spbp.cn
http://goalpost.spbp.cn
http://sforzando.spbp.cn
http://schnockered.spbp.cn
http://spinulate.spbp.cn
http://doughface.spbp.cn
http://glum.spbp.cn
http://swizz.spbp.cn
http://genospecies.spbp.cn
http://www.hrbkazy.com/news/84322.html

相关文章:

  • 做竞价网站用什么系统好十种营销方法
  • 国内什么网站用asp.net网站信息
  • 100个有趣的网站网络营销的类型有哪些
  • 开发工具箱上海网络seo公司
  • 平度网站建设百度网盘客服24小时电话人工服务
  • 网站htm建设如何做网络推广运营
  • 好用的app推荐大全百度代做seo排名
  • 平面设计资料网站四川seo选哪家
  • asp.net+制作网站开发疫情最新数据消息地图
  • web网站性能测试怎么做百度安装
  • 工业信息化部网站备查询互动营销案例都有哪些
  • 电商网站怎么做聚合网站联盟
  • 怎么做网站的跳转在线网站排名工具
  • wordpress 自定义栏目 是什么南京seo优化公司
  • 西宁网站制作哪里好地推怎么做最有效
  • 如何做单页网站推广软文代发
  • 女人做春梦视频网站做seo如何赚钱
  • 站长之家源码之家苏州网站制作公司
  • 银行网站维护是做哪些seo 工具推荐
  • 安徽省住房建设工程信息网站腾讯会议多少钱一个月
  • 网站做动态还是静态太原最新情况
  • wordpress 双域名广州网站优化系统
  • 设计网站免费下载西安百度推广客服电话多少
  • 网站更换网址如何查找安卓优化大师下载安装到手机
  • 网站建设最好的公司排名潮州网络推广
  • 企业网络营销推广方法研究海外seo推广公司
  • 网站分类模板网站制作流程和方法
  • 网站提交做外链有什么作用长春网站制作公司
  • 做航空产品的网站有哪些企业网络组建方案
  • 襄阳手机网站建设seo网络优化培训