• Qt设计师--ui文件转换成h文件及使用方法


    ui文件转换成h文件

    手动转换:

    运行CMD控制台

    cd到ui文件夹

    uic -o   u.h  u.ui      会得到一个u.h文件

    以上过程在构建时会自动产生

    h文件的使用方法: 

    方法一:继承

    myclass.h文件---父控件类

    #ifndef __CARCULATOR_H_ 
    #define __CARCULATOR_H_
    #include "u.h"   //导入ui界面头文件
    #include <QDialog> 
    
    //继承方式
    class myclass:public QDialog,public Ui::CarculatorDialog{ 
        //Ui_CarculatorDialog  与 Ui::CarculatorDialog 一样,这个类名看界面文件u.h
        //注意:必须先继承父窗口类QDialog,再继承ui界面类
        //这个父控件类要与ui.h类中setupUI函数需要的父控件类相同
        
    public:
        myclass(void);
    
    };
    #endif

    myclass.cpp 文件

    #include "myclass.h"
    
    myclass::myclass(void){  //构造函数
        
        setupUi(this);  //调用界面类中的setupUi函数
        //参数:父窗口指针
        //ui.h文件产生子控件,需要给他们指定父控件
    
    
    }

    main.cpp文件

    #include <QApplication>
    #include "myclass.h"
    
    
    int main(int argc,char *argv[])
    {
        QApplication app(argc,argv);  
    
        myclass win;
        win.show();
    
        return app.exec();  
    }

    功能代码补全后文件

    myclass.h文件

    #ifndef __CARCULATOR_H_ 
    #define __CARCULATOR_H_
    #include "u.h"   //导入ui界面头文件
    #include <QDialog> 
    #include <QDoubleValidator>
    
    //继承方式
    class myclass:public QDialog,public Ui::CarculatorDialog{ 
        //Ui_CarculatorDialog  与 Ui::CarculatorDialog 一样
        //注意:必须先继承父窗口类QDialog,再继承ui界面类
        //这个父控件类要与ui.h类中setupUI函数需要的父控件类相同
        
        Q_OBJECT
    public:
        myclass(void);
    public slots: 
        void enableButton(void); 
        void carculator(void);  
    
    };
    #endif

    myclass.cpp文件

    #include "myclass.h"
    
    myclass::myclass(void){  //构造函数
        
        setupUi(this);  //调用界面类中的setupUi函数
        //参数:父窗口指针
        //ui.h文件产生子控件,需要给他们指定父控件
        connect(m_x,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
        connect(m_y,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
        connect(m_button,SIGNAL(clicked(void)),this,SLOT(carculator(void)));
        m_x->setValidator(new QDoubleValidator(this));
        m_y->setValidator(new QDoubleValidator(this));
    
    
    }
    
    void myclass::enableButton(void){  
        bool bxok;
        bool byok;
        m_x->text().toDouble(&bxok);
        
        m_y->text().toDouble(&byok);
        m_button->setEnabled(bxok && byok);
    
    }
    void myclass::carculator(void){    
        double res=m_x->text().toDouble()  + m_y->text().toDouble();
        QString str=QString::number(res);
        m_z->setText(str);  
    }

     main.cpp与上面相同

    方法二:组合--创建ui界面类成员变量

    myclass.h文件

    #ifndef __CARCULATOR_H_ 
    #define __CARCULATOR_H_
    #include "u.h"   //导入ui界面头文件
    #include <QDialog> 
    #include <QDoubleValidator>
    
    //组合方式
    class myclass:public QDialog{ 
        
        
        Q_OBJECT
    public:
        myclass(void);
        ~myclass(void);  //添加一个析构函数
        //释放ui指针
    public slots: 
        void enableButton(void); 
        void carculator(void);  
    private:
        Ui::CarculatorDialog* ui;//创建界面类的成员变量
    //可以通过ui->访问子控件
    
    };
    #endif

    myclass.cpp 文件

    #include "myclass.h"
    
    myclass::myclass(void){  //构造函数
        ui=new Ui::CarculatorDialog();
        //也可以通过初始化列表申请空间
    
        ui->setupUi(this);  //调用界面类中的setupUi函数
        //参数:父窗口指针
        //ui.h文件产生子控件,需要给他们指定父控件
        connect(ui->m_x,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
        connect(ui->m_y,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
        connect(ui->m_button,SIGNAL(clicked(void)),this,SLOT(carculator(void)));
        ui->m_x->setValidator(new QDoubleValidator(this));
        ui->m_y->setValidator(new QDoubleValidator(this));
    }
    
    myclass::~myclass(void){  //析构函数
        delete ui;
    }
    
    void myclass::enableButton(void){  
        bool bxok;
        bool byok;
        ui->m_x->text().toDouble(&bxok);
        
        ui->m_y->text().toDouble(&byok);
        ui->m_button->setEnabled(bxok && byok);
    
    }
    void myclass::carculator(void){    
        double res=ui->m_x->text().toDouble()  + ui->m_y->text().toDouble();
        QString str=QString::number(res);
        ui->m_z->setText(str);  
    }

    main.cpp 与上面相同

  • 相关阅读:
    Qt操作xml文件(增删改功能)
    Qt解析xml
    Qt中使用DOM解析XML文件或者字符串二(实例)
    Qt中使用DOM解析XML文件或者字符串(实例)
    QThread 实用技巧、误区----但文档中没有提到
    事件循环与线程 二
    事件循环与线程 一
    第一讲 递归
    Ubuntu 建立桌面快捷方式
    Codeforces554B:Ohana Cleans Up
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13660315.html
Copyright © 2020-2023  润新知