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

网站建设与管理相关工作岗位一个小程序开发多少钱

网站建设与管理相关工作岗位,一个小程序开发多少钱,官网网站建设需求文档,设计一个app界面多少钱1 介绍 Qt中的属性系统是用于为对象添加自定义属性并管理这些属性的一种机制。它允许开发者在不修改类定义的情况下#xff0c;动态地为Qt对象添加新的属性#xff0c;并且能够对这些属性进行读取、设置和监听。 属性系统在Qt中是通过Q_PROPERTY宏和QObject的元对象系统来实现…1 介绍 Qt中的属性系统是用于为对象添加自定义属性并管理这些属性的一种机制。它允许开发者在不修改类定义的情况下动态地为Qt对象添加新的属性并且能够对这些属性进行读取、设置和监听。 属性系统在Qt中是通过Q_PROPERTY宏和QObject的元对象系统来实现的。开发者可以通过在QObject派生类中使用Q_PROPERTY宏将新的属性添加到对象中并为这些属性定义读取getter和设置setter方法。 1.1 主要作用总结 a自定义属性通过属性系统开发者可以向Qt对象中添加自定义的属性以便存储和访问特定的数据。         b属性读写属性系统允许开发者为属性定义读取和设置方法使得外部代码可以读取和修改对象的属性值。         c属性通知当属性的值发生变化时属性系统可以发出信号通知其他代码从而实现属性的监听和响应。         dQt的元对象系统属性系统是建立在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 QObjectclass 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_age10;int m_score79; };#endif // TPERSON_Htperson.cpp: #include tperson.hTPerson::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_Hwidget.cpp: #include widget.h #include ui_widget.hWidget::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_castTPerson *(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_castQSpinBox*(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 imeta-propertyOffset();imeta-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 imeta-classInfoOffset();imeta-classInfoCount();i){QMetaClassInfo classInfo meta-classInfo(i);ui-plainTextEdit-appendPlainText(QString(Name%1Value%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 imeta-propertyOffset();imeta-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 imeta-classInfoOffset();imeta-classInfoCount();i){QMetaClassInfo classInfo meta-classInfo(i);ui-plainTextEdit-appendPlainText(QString(Name%1Value%2).arg(classInfo.name()).arg(classInfo.value()));} } 界面展示
http://www.w-s-a.com/news/61692/

相关文章:

  • 运城网站推广找人做小程序要多少钱
  • 做外链哪个网站好seo诊断网站
  • 网站建设与管理考查方案上海公司免费起名
  • 哪个网站做h5好做汽车网站
  • 汝州网站制作住房和城乡建设部官网进行查询
  • 怎么做整人点不完的网站获取网站访客qq号码源码
  • 自建网站软件网站如何减少404跳转
  • 我想学制作网站吗公司起名网站十大排名
  • 广州白云手机网站建设淘宝店铺怎么推广
  • 青海省住房与城乡建设厅网站珠海高端网站制作公司
  • 深圳个性化建网站公司简便网站建设
  • 网站安全狗十大免费ppt网站在线
  • 进网站后台显示空白图片模板 网站源码
  • dedecms 英文网站怎么在网站上做模式题库
  • 轻网站怎么建立国外做评论的网站
  • 拉米拉网站建设乐清网站网站建设
  • 获取网站全站代码申请免费域名的方法
  • 网站制作建设公司哪家好wordpress仪表盘打不开
  • 最佳网站制作模板用手机能创建网站吗
  • 只做黑白摄影的网站网站建设好后给领导作介绍
  • 移动手机网站建设如何做网站地图视频
  • 手工业网站怎么做成都酒吧设计公司
  • .net 网站生成安装文件目录重庆网站建设沛宣网络
  • 怎么做钓鱼网站吗百度免费域名注册网站
  • 如何给网站做外部优化今年国内重大新闻
  • 有没有做生物科技相关的网站弄一个app大概多少钱
  • 五金加工东莞网站建设怎么做网页跳转
  • 淄博网站优化价格wordpress没有小工具
  • 自己搭建服务器做视频网站wordpress发布文章 发布
  • php仿博客园网站阅读分享网站模板