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;
class MainWindow : public QMainWindow
……
}
3mainwindow.cpp里实现与使用
ui_adv=new Page_adv(this);
QVBoxLayout *vLP2=new QVBoxLayout(ui->tab_adv);
connect(ui_adv->ui->saveAs_pushButton,&QPushButton::clicked,[this](){
学差用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_H2.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!");
});
相关文章推荐
- 在ASP文件中调用DLL
- 服务器端调用winzip命令行对上传的多个文件打包压缩
- 在ASP文件中调用DLL
- 在ASP.NET程序中存储和调用word文件(转载)
- 用java实现外部调用exe文件
- 在ASP.NET程序中存储和调用word文件(转载)
- .Net/C# 应用程序直接读取本地 Cookies 文件 (由于 WinXP SP2 调用 API: InternetGetCookie 无果)
- 实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method
- 在ASP文件调用DLL
- VC调用matlab中定义的.m文件中的函数的实例
- 如何在代码中调用“文件打开方式对话框”?
- 在ASP文件中调用DLL
- 使用PB调用API自动更新(非FTP模式)(六、AUTODOWN.INI文件)
- 在Delphi中调用CHM帮助文件
- 在asp.net中调用Excel 文件
- 如何在应用程序中调用帮助文件?
- 避免直接调用某些文件
- .Net/C# 应用程序直接读取本地 Cookies 文件 (由于 WinXP SP2 调用 API: InternetGetCookie 无果)
- 用java实现外部调用exe文件
- 拖放文件到系统区,shell的 调用过程