Creo/Proe 二次开发中使用 QT 编程流程
2016-01-12 16:56
597 查看
本文过期, 可以查看
http://blog.csdn.net/STPrinceT/article/details/71535694或者
http://blog.csdn.net/stprincet/article/details/70805180
1. 环境
Creo3.0 M400QT4.8.6 库
vs2015(使用vs2012编译器)
qtdestroy, uic , moc (都是qt自带的,位置 bin中)
2. 配置
2.1 运行环境
QT库的选择Qt4.8.6 自编译库,使用vs2012(x64)编译器编译,编译方法参见另外文档,编译位置D:\Qt\4.8.6
将QT库添加到环境变量 D:\Qt\4.8.6\lib
2.2 开发环境
1. C/C++ 附加包含目录 D:\Qt\4.8.6\include2. 链接器附加库目录 D:\Qt\4.8.6\lib
附加依赖项 QtGuid4.lib; QtCored4.lib (每个版本的qt依赖项名称不同,release和debug版不同,qt5需要多一个库 widget)
3. 添加界面
3.1使用 qtdestroy 设计界面,获得dialog.ui文件3.2 命令行执行(cmd) D:\Qt\4.8.6\bin\uic
dialog.ui –o
ui_dialog.h (dialog.ui 最好是全路径,后者相同)
3.3 vs中添加 ui_dialog.h文件并新建类,类继承自ui_dialog.h 中的类 和 Qdialog
例:class dialog1 : public QDialog,Ui_Dialog
3.4 类初始化函数: 添加setupUi(this); // 设置界面用
4. 信号和槽
4.1使用信号和槽需要继承Q_OBJECT
class dialog1 : public QDialog,Ui_Dialog { Q_OBJECT publicslots: voidmyslot(); … };
Q_OBJECT不需要 ;
信号不需要实现
槽函数实现方式:和实现类中成员函数一样
4.2信号和槽的连接
位置 类初始化函数中QObject::connect(this->Button_add, SIGNAL(clicked()), this, SLOT(myslot ()));
4.3附加文件
使用到Q_OBJECT的类需要特殊处理,使用命令mocD:\Qt\4.8.6\bin\moc dialog1.h –o moc_dialog1.cpp
4.4 将 moc_dialog1.cpp添加到项目中 ,(如果是mfc项目需要在本文件头添加#include"stdafx.h")
*使用到Q_OBJECT的类必须有对应的moc_xxx.cpp文件,否则编译不通过,*每次修改 .h 文件后,都要对moc_xx.cpp进行重新生成
5. 添加图片等资源 一个项目只能存在一个资源文件
1. 使用路径添加,可以使用绝对路径或者以工作目录为起点的相对路径2. 使用Qt的.qrc 文件
先将资源文件放入res(vs自动创建,位于代码文件夹)文件夹下
打开Qt creator并新建资源文件,保存路径为当前代码位置,名称为res
得到 res.qrc
使用rcc处理
D:\Qt\4.8.6\bin\rcc res.qrc–o res.cpp
在项目中添加res.cpp文件
在 res.cpp 开头添加 #include"stdafx.h"
资源路径为 :/new/prefix1/res/add_down.png 基本在文件最下方
使用案例
this->Button_add->setStyleSheet("QPushButton{border-image:url(:/new/prefix1/res/add_normal.png);}" "QPushButton:hover{border-image:url(:/new/prefix1/res/add_mouse.png);}" "QPushButton:pressed{border-image:url(:/new/prefix1/res/add_down.png);}");
6. Creo二次开发中的qt
Qt是当作类使用的,所以uic,moc都需要手动完成,自动完成方法存在,并不讨论建立以mfc为基础的二次开发项目(只要能编译dll,都可以使用),添加菜单,
动作函数
intuiCmdCmdActFn_z(uiCmdCmdIdcommand, uiCmdValue * p_value,void *p_push_command_data) { inti = 1; char *path = "D:\\PTC\\Creo3.0\\M040\\Parametric\\bin\\parametric.exe"; QApplicationapp(i, &path); dialog1 *dialog4 = newdialog1(); dialog4->show(); returnapp.exec(); return 0; }
将实现方法写在槽函数中即可,与mfc编程方法一致
7. 要点
1. 需要qt库支持,最好添加系统变量2. 中文编码问题,注并不能全部解决
QTextCodec *codec = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
3. 编码转换
QStringqs=QString::fromWCharArray(name);
4. 在qtdestroy中添加ico无法显示的问题
在ui_xx.h文件中 icon1.addFile(QString::fromUtf8("G:\\PTC\\bin\\QTDLL_win32\\ONE\\add_normal.png"),QSize(), QIcon::Normal, QIcon::Off);
添加完成路径
代码添加ico方法另查
5. 未知问题,qt的库与proe的库有冲突,只能使用 release版本编译
8. 非模态界面
非模态界面参考了之前mfc中的实现方法,并不一定适合所有版本(已知qt5可能会出现错误)dialog *dialog1 = NULL; dialog *dialog2 = NULL; QApplication * app1 = NULL; intuiCmdCmdActFn_z(uiCmdCmdIdcommand, uiCmdValue * p_value, void *p_push_command_data) { if (dialog1 == NULL) { dialog1 = newdialog(); } else { deletedialog1; dialog1 = newdialog(); } dialog1->show(); return 0; } intuiCmdCmdActFn_z2(uiCmdCmdIdcommand, uiCmdValue * p_value, void *p_push_command_data) {…} extern"C"intuser_initialize() { inti = 1; char *path = "parametric.exe"; if (app1 == NULL) { app1 = newQApplication(i, &path); } //添加菜单 //添加按钮 … } ////注意释放 extern"C"voiduser_terminate() { if (dialog1) { deletedialog1; } if (app1) { app1->exit(); deleteapp1; } }
参考多家汇总而成,qt5有问题,请使用qt4
4000
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)
- qt 学习小节
- QT的命名风格
- QT 中的sleep
- QT 串口的监控