Qt5.5 Creo3.0 在vs2012中开发流程记录

记录使用Qt5.5 开发 Creo3.0插件, 使用IDE是vs2012
前置工具
Qt5.5 -x64 -msvc2012 下载地址 :https://sourceforge.net/projects/qt64ng/files/qt/
vs2012
Creo3.0
qt-addin-vs-1.2.3 (1.2.4安装有问题,其他版本没尝试)


设置Qt

设置Qt

添加qt

新建项目

这里写图片描述
选择qt 控制台或者库都可以,这里以qt控制台为案例
这里写图片描述
下一步选择Qt组件,如果没有需要额外用到的qt组件,直接finish就可以
这里写图片描述
直接全部删除即可
这里写图片描述
因为Creo是64位的,所以选用x64。 release的原因是debug编译过不去,
设置项目属性,Creo的和Qt的都要
这里列出附加依赖项 注意qt的库

qtmain.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Widgetsd.lib
protk_dllmd.lib
psapi.lib
mpr.lib
Netapi32.lib
wsock32.lib
ws2_32.lib

建立一个窗口

这里写图片描述
这里写图片描述
注意继承的类, 并添加Q_OBJECT
这里写图片描述
这里ui_dialog.h的文件并不在当前路径下(可以设置)
这里写图片描述
项目右键 Qt Project Settings中设置


挂Creo菜单

main.cpp 中添加 
#include "CreoHead.h"
#include "QtWidgets/qapplication.h"
#include "qmessagebox.h"
#include "dialog1.h"
static QApplication * app1 = NULL;

Dialog1 *dialog = NULL;
int uiCmdCmdActFn_z(uiCmdCmdId command, uiCmdValue * p_value,void *p_push_command_data)
{
    if(dialog)
    {
        delete dialog;
    }
    dialog = new Dialog1();
    dialog->show();
    return 0;
}

static uiCmdAccessState AccessDefault(uiCmdAccessMode)
{
    return ACCESS_AVAILABLE;
}

extern "C" int user_initialize()
{
    ProError status = PRO_TK_NO_ERROR;
    ProFileName message_file;

    int i = 1;
    char  *path = "parametric.exe";

    if (app1 == NULL)
    {
        //Qt主线程
        app1 = new QApplication(i, &path);
    }
    ProStringToWstring(message_file,"menu_new.txt");
    //添加菜单

    status = ProMenubarMenuAdd("func","func","Help",PRO_B_TRUE,message_file);
    if(status != PRO_TK_NO_ERROR)
    {
        return 0;
    }

    ProMenubarmenuMenuAdd("func", "Menu1", "Menu1", NULL, PRO_B_TRUE, message_file);
    //添加按钮
    uiCmdCmdId action_id;
    status = ProCmdActionAdd("Menunew_act",(uiCmdCmdActFn)uiCmdCmdActFn_z,uiProeImmediate,
        AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&action_id);
    status = ProMenubarmenuPushbuttonAdd("Menu1","Button1name","butlabel","b1help",
        NULL,PRO_B_TRUE,action_id,message_file);

    return PRO_TK_NO_ERROR;
}
extern "C" void user_terminate()
{
    if(dialog)
    {
        delete dialog;
    }
    if (app1)
    {
        app1->closeAllWindows();
        app1->quitOnLastWindowClosed();
        app1->exit();
        app1->deleteLater();
        delete app1;
    }
}

完成,可以编译了
信号槽之类的就是qt的范畴了,不在描述
案例已上传

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章