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

原文地址:https://www.cnblogs.com/liming19680104/p/13697549.html