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);
相关推荐
无聊的菜鸟18 小时前
TMS320F2806X学习笔记(零)—— C2000、CCS、新建工程
笔记·mcu·c2000·f2806x
ljt272496066119 小时前
Compose笔记(八十三)--onVisibilityChanged
笔记
Fa_Mian_Tuan1 天前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
FakeOccupational1 天前
【电路笔记 STM32】stm32f103 实现HAL_UART_Transmit_DMA + 普通模式/连续模式的 UART DMA 收发
笔记·stm32·嵌入式硬件
北京海得康1 天前
DMD基因治疗deramiocel遭FDA质疑,Ultragenyx DTX401即将获批
笔记
zjnlswd1 天前
C#学习笔记2 刘铁锰
笔记·学习
Mr_liu_6661 天前
Claude非专业入门实战笔记(4):Claude运行方式简单解析——从RAG到代理循环
笔记·ai编程·claude
凯尔萨厮1 天前
Git(学习笔记)
笔记·git·学习
蒸蒸yyyyzwd1 天前
cpp选手备注秋招 MySQL学习笔记 day8
笔记·学习·求职招聘
AI直播技术杂谈1 天前
本周技术笔记:直播推流的心跳检测与断线重连逻辑
笔记