本文过期, 可以查看

http://blog.csdn.net/STPrinceT/article/details/71535694

或者

http://blog.csdn.net/stprincet/article/details/70805180

1.  环境

Creo3.0 M400

QT4.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\include

2.      链接器附加库目录          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_OBJECTpublicslots:voidmyslot();…};

Q_OBJECT不需要  ;

信号不需要实现

槽函数实现方式:和实现类中成员函数一样

4.2信号和槽的连接

位置 类初始化函数中

    QObject::connect(this->Button_add, SIGNAL(clicked()), this, SLOT(myslot ()));

4.3附加文件

使用到Q_OBJECT的类需要特殊处理,使用命令moc

D:\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

Creo/Proe 二次开发中使用 QT 编程流程相关推荐

  1. ProE二次开发 Creo二次开发 MCADEx Tools 免费工具QQ群 156242985

    ProE二次开发 Creo二次开发 MCADEx Tools 免费工具QQ群 156242985 转载于:https://www.cnblogs.com/esdtech/p/4199884.html

  2. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  3. python在abaqus二次开发_Python在ABAQUS二次开发中的应用实例2ppt

    PPT内容 这是Python在ABAQUS二次开发中的应用实例2ppt,包括了ABAQUS 脚本概述,Python 语言简介,ABAQUS脚本编写等内容,欢迎点击下载. 主要内容 一.ABAQUS 脚 ...

  4. 织梦php开发tags功能开发,织梦dedecms二次开发中几个标签的应用

    在织梦dedecms 里面对于数组进行循环的标签有好几个,在前台模板即使用静态模板引擎有,{dede:foreach array='数组名称'}[field:key/] [field:value/]{ ...

  5. lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...

    <毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...

  6. 「FastAdmin」fastadmin二次开发中如何自定义查询数据

    fastadmin二次开发中如何自定义查询数据 问题背景:最近做一个网站的过程中遇到了一个需求:对于不同用户组的用户,显示的数据要根据权限来筛选.问题看起来不是很难,文档和社区中已经给了足够的提示,我 ...

  7. Android开发中的多线程编程技术

    Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...

  8. .Net开发中的多线程编程总结

    微软.Net开发中的多线程编程进行一个简单的总结,相信对大家会有所帮助的.下面就具体来看看: 不需要传递参数,也不需要返回参数 我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下: T ...

  9. 嵌入式开发中C语言编程要点简述!

    在嵌入式Linux的C语言开发中,C语言的基本编程依然是最重要的内容.除此之外,与一般的C语言编程相比,嵌入式Linux的C语言编程有以下一些要点: 1.库函数与系统调用 在进行C语言编程的时候,使用 ...

最新文章

  1. 四十六、获得SD卡的大小以及内部的文件信息
  2. jquery 鼠标经过显示 信息小卡片
  3. 设计模式之访问者(visitor)模式
  4. JVM内存GC的骗局——JVM不抛出OOM但内存已经泄露
  5. 重温java web过滤器filter
  6. i7跑服务器系统,i7主机做服务器
  7. php websocket 实战,一次WebSocket项目实战后总结的经验
  8. Win32 的dll导入问题总结-------------
  9. 开源如何走向商业化?
  10. pgpool-II的master-slave模式的分析
  11. 【转】12 TOP Command Examples in Linux
  12. 软件开发过程模型综述
  13. js—封装原生AJAX
  14. 统计相关国际期刊汇总
  15. 了解计算机病毒及杀毒方式,最简易的计算机病毒查杀方法
  16. 章文嵩将离职,曾是阿里开源“赶集人”,投身开源 20 年
  17. nagios监控安装配置
  18. Mac通过brew安装Nodejs错误:Could not symlink lib/dtrace/node.d
  19. zbrush 制作护腕1 -- 基础模型
  20. 解决:Exception in thread “main“ java.io.IOException: Failed on local exception: com.google.protobuf

热门文章

  1. python字典更新值_Python–字典元组值更新
  2. c语言选择结构典型例题
  3. 数据库检索和全文检索的比较(性能,匹配度准确度,相关度排序)
  4. DML,Data Manipulate Language,数据操作语言【分】
  5. 2020也要加油鸭!
  6. Unity子线程与主线程交互(委托方式)
  7. 南邮nctf-sql injection 3(宽字节注入) 手注+sqlmap
  8. 95码号、106码号申请时常见的几种错误
  9. ARM开发环境入门:keil与proteus的简单程序的熟悉
  10. nginx 配置404