QObject的setUserData和setProperty——Qt

简介: QObject的setUserData和setProperty——Qt
QObjectUserData* userData(uint id) const;
void QObject::setUserData(uint id, QObjectUserData* data)
{
    Q_D(QObject);
    if (!d->extraData)
        d->extraData = new QObjectPrivate::ExtraData;
 
    if (d->extraData->userData.size() <= (int) id)
        d->extraData->userData.resize((int) id + 1);
    d->extraData->userData[id] = data;
}
 
 
QVariant property(const char *name) const;
bool QObject::setProperty(const char *name, const QVariant &value)
{
    Q_D(QObject);
    const QMetaObject* meta = metaObject();
    if (!name || !meta)
        return false;
 
    int id = meta->indexOfProperty(name);
    if (id < 0) {
        if (!d->extraData)
            d->extraData = new QObjectPrivate::ExtraData;
 
        const int idx = d->extraData->propertyNames.indexOf(name);
 
        if (!value.isValid()) {
            if (idx == -1)
                return false;
            d->extraData->propertyNames.removeAt(idx);
            d->extraData->propertyValues.removeAt(idx);
        } else {
            if (idx == -1) {
                d->extraData->propertyNames.append(name);
                d->extraData->propertyValues.append(value);
            } else {
                if (value.userType() == d->extraData->propertyValues.at(idx).userType()
                        && value == d->extraData->propertyValues.at(idx))
                    return false;
                d->extraData->propertyValues[idx] = value;
            }
        }
 
        QDynamicPropertyChangeEvent ev(name);
        QCoreApplication::sendEvent(this, &ev);
 
        return false;
    }
    QMetaProperty p = meta->property(id);
#ifndef QT_NO_DEBUG
    if (!p.isWritable())
        qWarning("%s::setProperty: Property \"%s\" invalid,"
                 " read-only or does not exist", metaObject()->className(), name);
#endif
    return p.write(this, value);
}
目录
相关文章
|
存储 C++
14 QT - QMainWindow
14 QT - QMainWindow
52 0
|
前端开发 数据可视化 C++
Qt 之 QWidget QLabel
Qt 之 QWidget QLabel
117 0
WK
|
2月前
|
数据可视化 开发者 容器
QWidget类
QWidget 是 Qt 框架中的基础类,用于创建用户界面的可视化组件。它是所有 UI 组件的基类,提供绘制、布局、事件处理、样式设置和部件通信等功能。常见子类包括 QMainWindow、QDialog、QPushButton 等,支持灵活的窗口管理和丰富的用户交互。
WK
39 3
|
5月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)
|
5月前
【qt】有点意思的信号与槽
【qt】有点意思的信号与槽
24 0
|
7月前
Qt之QMainWindow
Qt之QMainWindow
|
7月前
|
编译器
【Qt】Qt中的信号槽
【Qt】Qt中的信号槽
Qt 之 QDebug,QString
Qt 之 QDebug,QString
99 0
|
8月前
|
数据可视化 安全 程序员
【Qt】—— 信号与槽
【Qt】—— 信号与槽
112 2
|
8月前
|
存储 自然语言处理 API
QT基础教程(QDebug和QString)
QT基础教程(QDebug和QString)
231 0