首页 / 资讯中心 / 文章详情

插件式框架学习(3)

插件式框架学习(3) ★ FEATURED ARTICLE
下一步我想要实现这样的效果在main.ui中可以动态载入QWidget相关的类你理解吗这首先需要一种自定义的QWidget子类b作为一个容器比如在我的main.ui中左边是b右边也是b。我还有3个QWidget子类c,d,e。我可以随意选择使用c,d,e中的任意一个它们的外壳的类b。你理解我的想法吗理解。你想让b成为一个通用容器c、d、e成为可替换的内容窗口。比如main.ui里放两个b主窗口 main.ui ┌─────────────────┬─────────────────┐ │ 左侧容器 b │ 右侧容器 b │ │ │ │ │ 当前装入 c │ 当前装入 e │ │ │ │ └─────────────────┴─────────────────┘之后你可以把左侧换成d右侧换成c。两个容器独立选择负责承载内容并让内容自动填满容器。结合当前的外部.ui加载方式可以这样实现容器类b继承QWidget提供装入、替换内容窗口的能力。内容类c、d、e各自继承QWidget实现不同的界面和业务。窗口工厂根据名称例如c、d、e创建对应窗口。自定义QUiLoader加载main.ui时识别并创建容器b。还可以在 Designer 中给每个b设置一个动态属性例如contentClass左侧 bcontentClass c 右侧 bcontentClass e程序读取这个属性将对应内容装进去。这样你只需修改main.ui中的配置再重启程序就能改变左右两边使用的内容。这里的边界是c、d、e的 C 实现需要先编译进程序或插件之后选择它们装在哪个容器里可以通过 UI 文件配置无须重新编译。如果理解无误你要做的就是在.ui中编排容器通过类名配置每个容器承载的 QWidget 内容。已实现并编译通过WidgetContainer对应你的容器b。CWidget / DWidget / EWidget分别演示计数、文本输入和列表。默认左侧加载c右侧加载e。编辑main.ui将容器的contentClass改为c,d或e。保存重启生效。也支持代码中直接切换container-setContentClass(d);此时就实现了动态加载类了我可以写100个类想要加载谁就加载谁很方便。对已经实现了这种效果。你可以编写 100 个QWidget子类并在工厂中注册对应名称。之后只需在main.ui中设置容器的contentClass就能选择加载哪个类同一个类也可以在多个容器中分别创建实例。准确地说这是运行时按名称创建已注册的类。新增或修改 C 类需要编译在这些类之间选择、组合和调整布局只需修改 UI 文件并重启程序。如果以后希望“新增类也不用重新编译主程序”就可以进一步把内容类放到动态插件 DLL中。Release v1.0.3支持可配置 QWidget 容器与按名称加载内容类 · lianpeiliang/LearnFramework
阅读完成 · 觉得有帮助?
咨询建站