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);
}
目录
相关文章
|
算法 API 调度
深入探索:在std::thread中创建并管理QEventLoop的全面指南(一)
深入探索:在std::thread中创建并管理QEventLoop的全面指南
584 1
QComboBox设置下拉item大小
QComboBox设置下拉item大小
955 0
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
3632 2
|
计算机视觉
使用QT显示OpenCV读取的图片
使用QT显示OpenCV读取的图片
475 1
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
2720 0
|
Windows 计算机视觉 Linux
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
该文档介绍了Qt的跨平台特性,并推荐在Windows和Linux开发中使用QtCreator。在Windows下添加动态库,可以通过Visual Studio配置.lib文件和.dll文件,或在QtCreator中使用&quot;添加库&quot;功能。在QtCreator中,选择库文件、包含路径,并配置Details,然后更新.pro文件,清除、qmake及构建项目。运行时确保.dll与.exe在同一目录下。
853 0
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
|
存储 C++ 容器
QVariant类应用 和 Q_DECLARE_METATYPE说明
QVariant类应用 和 Q_DECLARE_METATYPE说明
|
Windows
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明
2086 0
|
存储 安全 调度
深入探索:在std::thread中创建并管理QEventLoop的全面指南(二)
深入探索:在std::thread中创建并管理QEventLoop的全面指南
947 2
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
3233 1
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用