QT笔记 - 加载带有提升为自定义部件类的“.ui“文件 - 重写QUiLoader::createWidget()函数

说明

如果ui设计中有提升过小部件,则无法直接使用QUiLoader 加载。完成加载需要重新实现UiLoader::createWidget()函数。

函数

  1. virtual QWidget * QUiLoader ::createWidget(const QString & className, QWidget * parent = Q_NULLPTR, const QString & name = QString())

释义

  1. 该函数完全由Qt系统自行调用,为非用户函数,但用户可以重新实现该函数。Qt在根据ui文件创建类对象时调用该函数。形参释义:className:Qt想要创建类对象的类的名称;parent:该对象必须设置的parent;name:该对象必须设置的对象名(需使用函数setObjectName()设置)。

示例

下面是类的实现,其中"MyTextEdit "作为自定义的提升小部件类

cpp 复制代码
//自定义小部件
class MyTextEdit : public QTextEdit
{
    Q_OBJECT
public:
    MyTextEdit(QWidget * parent = nullptr) : MyTextEdit(parent){}
};

//自定义QUiLoader派生类
#include "QUiLoader"
class CustomClassUiLoader : public QUiLoader
{
    Q_OBJECT

public:
    CustomClassUiLoader(QObject * parent = Q_NULLPTR);

    //重写createWidget()类
    QWidget * createWidget(const QString & className, QWidget * parent = Q_NULLPTR,
                           const QString & name = QString())
    {
        if(className == "MyTextEdit"){
            MyTextEdit* widget = new MyTextEdit(parent);
            widget->setObjectName(name);
            widget->setEdit(info.textEdit );
            return widget;
        }
        return QUiLoader::createWidget(className, parent, name);
    }
};

加载ui,

cpp 复制代码
    QUiLoader uiL;
    QFile file("C:\\Users\\Administrator\\Desktop\\untitled2\\form.ui");
    file.open(QFile::ReadOnly);

    QWidget * widget = uiL.load(&file, ui->textEdit);
    QVBoxLayout  * layout = new QVBoxLayout;
    layout->addWidget(widget);
    layout->setContentsMargins(0, 0, 0, 0);
    file.close();

    ui->frame->setLayout(layout);
相关推荐
今天背单词了吗9803 分钟前
算法学习笔记:16.哈希算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
笔记·学习·算法
梁辰兴18 分钟前
企业培训笔记:axios 发送 ajax 请求
前端·笔记·ajax·vue·axios·node
DKPT28 分钟前
Java观察者模式实现方式与测试方法
java·笔记·学习·观察者模式·设计模式
鲁子狄44 分钟前
[笔记] 动态 SQL 查询技术解析:构建灵活高效的企业级数据访问层
java·spring boot·笔记·sql·mysql·mybatis
ChongYu重玉1 小时前
【node/vue】css制作可3D旋转倾斜的图片,朝向鼠标
javascript·css·vue.js·经验分享·笔记·node.js·vue
ui设计前端开发老司机1 小时前
从数据洞察到设计创新:UI前端如何利用数字孪生提升产品交互体验?
前端·ui·交互
饕餮争锋3 小时前
设计模式笔记_结构型_代理模式
笔记·设计模式·代理模式
序属秋秋秋4 小时前
《C++初阶之STL》【泛型编程 + STL简介】
开发语言·c++·笔记·学习
特种加菲猫5 小时前
构建完整工具链:GCC/G++ + Makefile + Git 自动化开发流程
linux·笔记·git·自动化
Jackyzhe12 小时前
Flink学习笔记:整体架构
笔记·flink