qt5-QObject
cpp文件
#include "win.h" #include "ui_win.h" Win::Win(QWidget *parent) : QDialog(parent) , ui(new Ui::Win) { ui->setupUi(this); QLabel* label=new QLabel("我是中国人"); label->setObjectName("ppp"); //设置ObjectName属性 QString str=label->objectName(); //返回ObjectName属性 label->setParent(this); //设置父对象 //label->setParent(NULL); //释放父对象 label->move(10,10); QPushButton* button=new QPushButton("正确",this); button->move(100,10); button->setProperty("lm",51); //给控件设置自定义属性和属性值 button->setProperty("lmm",100); //可以设置多个属性和属性值
//需要#include <QVariant>
QVariant v=button->property("lm"); //返回属性值 //QVariant(int, 51) button->setObjectName("bbb"); QList<QByteArray> lb=button->dynamicPropertyNames(); //返回所有自定义属性 QObject* object=label->parent(); //返回父对象 //Win(0x76fe1c, name = "Win") QList<QObject*> lq=this->children(); //返回子对象 //(QLabel(0x2efe6e0), QPushButton(0x2efe900)) label1=new QLabel("我是物理教师",this); label1->move(10,30); QLabel* la = this->findChild<QLabel *>("ppp",Qt::FindDirectChildrenOnly); //返回指定类型ObjectName=ppp的第一个子对象 /* this 寻找this的子对象 参数2:Qt::FindDirectChildrenOnly 查找直接孩子 Qt::FindChildrenRecursively 查找所有孩子(递归搜索)--默认 */ la = this->findChild<QLabel *>(QString(),Qt::FindDirectChildrenOnly); //返回指定类型的第一个子对象 la = this->findChild<QLabel *>(); //返回指定类型的第一个子对象 //没找到 返回NULL QList<QLabel*> l = this->findChildren<QLabel*>(); //返回指定类型的所有子对象 //label->deleteLater(); //删除对象,堆中的实际空间也释放了 //不会马上删除,它发出一个删除event,主循环接收到删除event后才删除 bool b=label->isWidgetType(); //判断对象是不是控件 //是 返回true b=label->inherits("QWidget"); //判断对象是不是继承于QWidget类;是返回True connect(button, SIGNAL(clicked()),this, SLOT(ff())); //信号 connect(label1, SIGNAL(destroyed()),this, SLOT(destroyed())); //在对象label1被销毁之前立即发出这个信号,不能被阻止 //button->blockSignals(true); //临时阻断信号与槽函数的连接 //False 恢复连接 b=button->signalsBlocked(); //判断信号是否被临时阻断;Ture被阻断 connect(label1, SIGNAL(objectNameChanged(QString)),this, SLOT(AA(QString))); //在objectName属性发生变化时发出信号 qDebug()<<b; } Win::~Win() { delete ui; } void Win::destroyed() { qDebug()<<"label1被销毁了"; } void Win::ff() { //label1->deleteLater(); label1->setObjectName("mmm"); } void Win::AA(QString s) { QObject * ject= sender(); //返回发送者指针 qDebug()<<s<<ject; }
h文件
#ifndef WIN_H #define WIN_H #include <QDialog> #include <QLabel> #include <QDebug> #include <QPushButton> #include <QString> #include<QVariant> QT_BEGIN_NAMESPACE namespace Ui { class Win; } QT_END_NAMESPACE class Win : public QDialog { Q_OBJECT public: Win(QWidget *parent = nullptr); ~Win(); private: Ui::Win *ui; QLabel* label1; public slots: void destroyed(); void ff(); void AA(QString); }; #endif // WIN_H
main文件
#include "win.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Win w; w.show(); return a.exec(); }
以上工程下载地址:链接:https://pan.baidu.com/s/1CEPz40YgHpef1WWmtBSEOw 提取码:6666