您的位置:首页 > 产品设计 > UI/UE

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

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

  

     学差用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_OBJECT
public:
explicit Page_adv(QWidget *parent = 0);
~Page_adv();
friend class MainWindow;
private:
Ui::Page_adv *ui;
};
#endif // PAGE_ADV_H
2.mainwindow.h里定义一个UI对象
class MainWindow : public QMainWindow
{
Q_OBJECT
signals:
 ....
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!");
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: