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的範疇了,不在描述
案例已上傳

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