Qt ui界面文件的调用--quiloader

    xiaoxiao2025-06-14  39

         因为文字功底不好,但最近发现,学习还是得做做笔记好一点。很多时候以会忘记以前自己 想的小功能小技巧,还得去电脑里翻以前的代码找半天。现在就都在这上边记好笔记方便以后自己 查阅温习吧。

      

         学差用QT有一段时间了,而qt designer一直没怎么用过,主要是因为单独的UI文件调用起来比较麻烦。在网上也查了很多资料很的很多办法,感觉都不是很理想。看designer 自己 的帮助文档里边也有关于ui文件调用的方法介绍。现在选择了相对简单洁一点的调用方法做一个笔记 。

    第一种方法:

    1.首要把调功能的类头文件加入(我的QT是5.6版本用来 头文件是)

         #include<QtUiTools/QUiLoader>

     2.在.pro工程文件里加入

        QT += uitools  

    3.直接上代码比起来更方便一点:

        QUiLoader loader;

    QFile file(":/d_modbus.ui"); //调入UI文件 file.open(QFile::ReadOnly); QWidget *tab_Modbus_wdg = loader.load(&file); file.close(); QVBoxLayout *vLP2 = new QVBoxLayout(ui->tab_Modbus); vLP2->addWidget(tab_Modbus_wdg);//DMODBUS面板UI加入TabWidget页面3 file.setFileName(":/advanced_option.ui"); file.open(QFile::ReadOnly); QWidget *tab_Adv_wdg = loader.load(&file); file.close(); QVBoxLayout *vLP3 = new QVBoxLayout(ui->tab_adv); vLP3->addWidget(tab_Adv_wdg); //高级面板UI加入TabWidget页面2 if(tab_Adv_wdg) { QList<QPushButton *> page_adv_Buttons =tab_Adv_wdg->findChildren<QPushButton *>(); if(!page_adv_Buttons.isEmpty()) qDebug() <<page_adv_Buttons; } 现在访问UI上的按钮部件就可以用QList容器了。 但感觉这样去操作UI部件有点不是很方便 ,不优雅,水平有限等以后技术再补充。 第二种方法: 把ui。做成.ui+.h+.cpp单独的类来调用。这个方法我比较喜欢用C++友元类来操作简单粗暴。虽然有C++面象对象理念有一点背离。 但我觉得自己写自己 的代码,怎么样方便怎么样做就好(私以为比较适合单人独立开发的情况 )把mainwindow类写成UI类的友元类 直接调用。 1. #ifndef PAGE_ADV_H#define PAGE_ADV_H#include <QWidget>namespace Ui {class Page_adv;}class Page_adv : public QWidget{ Q_OBJECTpublic: explicit Page_adv(QWidget *parent = 0); ~Page_adv(); friend class MainWindow;private: Ui::Page_adv *ui;};#endif // PAGE_ADV_H2.mainwindow.h里定义一个UI对象class MainWindow : public QMainWindow{ Q_OBJECTsignals: ....public: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private: Ui::MainWindow *ui; ..... Page_adv *ui_adv;//定义一个UI对象指针 …… }3mainwindow.cpp里实现与使用 ui_adv=new Page_adv(this); QVBoxLayout *vLP2=new QVBoxLayout(ui->tab_adv); vLP2->addWidget(ui_adv);//这里我是把UI加载到了一个主界面TabWidget其中的一个字页面中。 connect(ui_adv->ui->saveAs_pushButton,&QPushButton::clicked,[this](){ ui->textEdit->setText("hello!"); });

    转载请注明原文地址: https://ju.6miu.com/read-1299927.html
    最新回复(0)