Qt:使用uic生成ui_类,按类名动态加载

时间:2015-11-22 14:11:17

标签: c++ qt

是否可以通过类名动态加载由uic生成的.ui类?我需要决定动态加载哪个UI类。我在编译时没有这些信息。我不想使用QUiLoader。相反,我想通过字符串将direct approach here与QMetaType对象实例化结合起来。

即。

  1. 将UI文件添加到项目文件中的FORMS
  2. 声明用于QMetaType用法的UI类Q_DECLARE_METATYPE(Ui :: planar_break)或Q_DECLARE_METATYPE(Ui_planar_break)
  3. 然后根据用户操作动态形成一个字符串类名:“Ui :: planar_break”或“Ui_planar_break”
  4. 并调用以下函数来获取UI小部件指针以供使用?
  5. QWidget* initiateClassByName(QString name){
        int id = QMetaType::type(name.toLatin1());
        QWidget* widget=nullptr;
        if (id != QMetaType::UnknownType) {
            widget=static_cast< QWidget* > (QMetaType::create(id));
            //QMetaType::destroy(id, myClassPtr);
            //myClassPtr = 0;
        }
        return widget;
    }
    

    与每次实例化特定对话框时动态加载十几个UI文件(存储在Qt资源文件中)相比,我试图提高性能。当我这样做时,我似乎每次都得到一个QMetaType :: UnknownType。想法?感谢。

    (嗯,不知道为什么我的功能在这里没有显示为代码块,直到我把它作为报价。)

0 个答案:

没有答案