您的位置:首页 > 编程语言 > Qt开发

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 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_OBJECT

publicslots:

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

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Creo Proe Qt