• 详解QUiLoader 动态加载.ui文件


    http://blog.chinaunix.net/uid-13838881-id-3652523.html
    1.适用情况:
    	动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui 文件。不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序运行过程中需要用到UI文件时,用 QUiLoader 加载.ui文件,达到相同目的。
        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2.适用环境:
    	1.UI文件是程序运行中途创建生成的,在同程序的其他地方调用,没法进行uic。
    	2.前端设计和功能实现相分离,前端设计人员和功能实现人员只要事前沟通好相关组件的名称等,就可以进行独立开发,能提高效率。
        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    3.配置信息:
    	3.1若使用的.pro文件生成,需要在.pro文件中需要加上
    
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += .
    INCLUDEPATH += .
    CONFIG += uitools
    # Input
    FORMS += demo.ui
    SOURCES += uiloader.cpp

    3.2如使用的是VS开发工具,需要添加QtUiToolsd.lib/QtUiTools.lib 库

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    4.代码实现:

    4.1头文件

    1. #include <QtUiTools/QtUiTools>  

    4.2核心代码

    1. //传入UI文件路径  
    2. QString uifilePath = "./demo.ui";  
    3. QUiLoader uiLoader;   
    4. QFile file(uifilePath);   
    5. file.open(QIODevice::ReadOnly);  
    6.   
    7. //setWorkingDirectory 设置工作目录:若UI文件中引用了其他目录的资源,可在此处设置工作目录  
    8. const QDir &workdir(uifileWorkPath);  
    9. uiLoader.setWorkingDirectory(workdir);  
    10.   
    11. //加载UI文件  
    12. QWidget* getWidget = uiLoader.load(&file,parent);   
        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    5.元素查找

    对于UI上的各个组件,可用下面方法进行查找

    1. //1.查找名称为“读写的”QPushButton  
    2. QPushButton *getButton = getWidget->findChild<QPushButton *>("读写");   
    3.   
    4. //2.查找所有QPushButton  
    5. QList<QPushButton *> getAllPButtons = getWidget->findChildren<QPushButton *>();  

       ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    6.信号槽机制

    connect(getButton,SIGNAL(clicked()),this,SLOT(setButtonClicked()));处理ui_setButton的clicked()信号。
    但拜元对象机制所赐,还有一劳永逸的方法
    QMetaObject::connectSlotsByName(this);该函数会将this的所有子对象都连接上一个槽(slot),槽的命名规范为
    on_对象名_信号名,比如上面的setButton的clicked(),将会生成一个on_setButton_clicked()的槽,你只要实现该槽函数就可以了。

  • 相关阅读:
    ansible-handlers
    LNMP
    编译安装sshpass
    cadence-irun(xrun) 增量编译
    sva 基础语法
    bsub && lsf 介绍
    Perl 输出内容到 excel
    Perl sendmail
    dlopen与dlsym用法
    perl在linux下通过date获取当前时间
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5098948.html
Copyright © 2020-2023  润新知