QT+ObjectARX 2022

今天怀着无比激动的心情写下这篇文章,因为QT在rax中使用成功

QT中的ARX配置

LoadQtDlls.pro

TARGET = QTARXLoadQtDlls
#the sdk include path
INCLUDEPATH += "D:\ObjectARX 2022\inc"
INCLUDEPATH += "D:\ObjectARX 2022\inc-x64"

#rxapi.lib; acdb21.lib; acge21.lib; acad.lib; ac1st21.lib; accore.lib;
LIBS+= -L"D:\ObjectARX 2022\lib-x64" -lrxapi
LIBS+= -L"D:\ObjectARX 2022\lib-x64" -lacdb24
LIBS+= -L"D:\ObjectARX 2022\lib-x64" -lacge24
LIBS+= -L"D:\ObjectARX 2022\lib-x64" -lacad
LIBS+= -L"D:\ObjectARX 2022\lib-x64" -lac1st24
LIBS+= -L"D:\ObjectARX 2022\lib-x64" -laccore

#DEF_FILE
DEF_FILE += $$PWD/AcRxDefault.def

#use md dll
QMAKE_CXXFLAGS += /MD

#change .dll to .arx
TARGET_EXT = .arx

#remove _DEBUG
DEFINES -= _DEBUG 
DEFINES += _OBJECT_ARX_VERSION_X64_=2022

QT       += core
QT       += gui
QT       += widgets
QT       += qml

#Qt project template
TEMPLATE = lib

SOURCES += this_main.cpp \
    form.cpp

RESOURCES += \
    images.qrc

DESTDIR = $$PWD/../../release/Autocad2022

FORMS += \
    form.ui

HEADERS += \
    form.h

ARX入口书写

this_main.cpp

#pragma warning( push)
#pragma warning (disable: 4189 4100 )
#include <Windows.h>
#include <arxHeaders.h>
#pragma warning( pop)

#include <string_view>

using namespace std::string_literals;

#include <QtWidgets>
#include <QtQml>
#include<QMessageBox>

inline void HellowWorld() {
    acutPrintf(LR"(Hellow Word!
)");
}
inline void HellowWorldARX() {
//    QJSEngine varE;
//    varE.evaluate( QString("1+1") );
    {
        QMessageBox varBox ;
        varBox.setText(("Hellow World!"));
        varBox.exec() ;
    }
    auto varDataTime = QDateTime::currentDateTime().toString().toStdWString();
    varDataTime = LR"(Hellow World!)" + varDataTime ;
    acutPrintf(varDataTime.c_str());
}

namespace {
    namespace _cpp_private {
const std::string qtApplicationPath ="123";/*!!!*/
//#if _OBJECT_ARX_VERSION_X64_ == 2018
//            u8R"(D:\Program Files\AutoCAD 2018\acad.exe)"s;
//#else
//            u8R"(D:\Program Files\AutoCAD 2022\AutoCAD 2022\acad.exe)";
//#endif
        inline int & getArgc() {
            static int ans;
            ans = 1;
            return ans;
        }
        inline char** getArgv() {
            static char acadpath[] =u8R"(D:\Program Files\AutoCAD 2022\AutoCAD 2022\acad.exe)";
            static char *argv[] = { nullptr };
            std::copy(qtApplicationPath.begin(), qtApplicationPath.end(),
                static_cast<char*>(acadpath));
            argv[0] = static_cast<char *>(acadpath);
            return argv;
        }
    }
}/*namespace*/

extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) {
    switch (msg) {
    case AcRx::kInitAppMsg: {
        acrxDynamicLinker->unlockApplication(pkt);
        acrxRegisterAppMDIAware(pkt);
        /*****************************************/
        {
            if (qApp == nullptr) {
                /*create the qt applicaton and never destory it*/
                auto varQtApplication =
                    new QApplication(_cpp_private::getArgc(), _cpp_private::getArgv());
                (void)varQtApplication;
            }
            {
                /*force to load images plugins*/
                QImage varImage{ QString(":/png/this.png") };
                varImage.width();
                varImage.height();
            }

        }
        /*****************************************/
        acedRegCmds->addCommand(
            L"SSTD_GLOBAL_CMD_GROUP",
            L"HellowWorld",
            L"HellowWorld",
            ACRX_CMD_MODAL,
            &HellowWorldARX);
    }break;
    case AcRx::kUnloadAppMsg: {}break;
    default:break;
    }
    return AcRx::kRetOK;
}

/********************************/

代码结构

结果展示

this.png

生成的arx

细节注意

arx同级目录的dll

arx同级目录的dll是qt编译出的,不然无法加载

使用的命令D:\Qt\5.15.2\msvc2019_64>windeployqt.exe C:\Users\yhx\Downloads\ObjectArxAutocad2018Vs2017Qt59-master\ObjectArxAutocad2018Vs2017Qt59-master\release\Autocad2022\QTARXLoadQtDlls.arx

CAD加载arx

使用命令arx

QT项目配置

参考https://github.com/nanguazhude/ObjectArxAutocad2018Vs2017Qt59/blob/master/objectarx.pro

git的项目地址,持续更新中

QTObjectARX2022/LoadQtApplication at main · Mysunshinecode/QTObjectARX2022 (github.com)

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
QT ObjectARX是一种用于开发Autodesk AutoCAD插件的技术。根据引用中的链接,您可以在GitHub上找到一个名为QTObjectARX2022的项目,该项目提供了加载Qt应用程序的示例代码和说明。该项目使用了一些ObjectARX库,如rxapi.lib、acdb21.lib、acge21.lib等,以及Qt库,如QtCore、QtGui和QtWidgets。根据引用中的配置文件LoadQtDlls.pro,可以看到项目的一些设置,包括头文件和库文件的路径以及使用的Qt模块。最终的输出文件是一个.arx文件,它是AutoCAD的插件文件格式。 关于如何使用QT ObjectARX,您需要在AutoCAD的开发环境中进行设置和编译。根据引用中给出的命令行示例,您可以使用windeployqt.exe工具来将Qt相关的依赖文件复制到您的ARX插件的目录中。然后,将编译后的ARX文件加载到AutoCAD中,即可使用QT ObjectARX开发的功能。 总结起来,QT ObjectARX是一种用于开发AutoCAD插件的技术,结合了Qt库和ObjectARX库。您可以使用GitHub上的示例代码作为起点,并根据需要进行配置和编译。通过复制所需的Qt依赖文件,并将编译后的ARX文件加载到AutoCAD中,您就可以使用QT ObjectARX开发的功能了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QT+ObjectARX 2022](https://blog.csdn.net/sunshinecandy/article/details/128573946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值