最近在测试Xcode原生Mac Cocoa GUI应用中直接调用Qt GUI时遇到了一个报错找不到native plugin的问题。先记录下操作系统是:macOS 13.4,Xcode版本是:Version 14.3 (14E222b),Qt版本是:6.8.0。用法是在Xcode中新建一个App,interface选的xib(但应该没关系,因为根本没用任何xcode GUI编辑功能),然后在生成的的代码项目中手动加入各种依赖的Qt Framework,并设置好include,lib,rpath等各种路径。代码也是从网上搜到的很简单的创建Qt空间后,通过winId的方式(这是Qt6新改的,以前的Qt5及旧版本需要使用QMacNativeWidget)挂到NSView下,如下:
1 2 3 4 5 6 7 8 9 | - ( void )applicationDidFinishLaunching:( NSNotification *)aNotification { // Insert code here to initialize your application QPushButton* btn = new QPushButton( "testtttttttttttt" ); NSView * viewBtn = (__bridge NSView *)(( void *)btn->winId()); [ self .window.contentView addSubview:viewBtn]; btn->show(); [viewBtn setNeedsDisplay: YES ]; [ self .window makeKeyAndOrderFront: self .window]; } |
需要注意的是开了ARC后的winId返回到NSView*的cast,c cast,c++ cast直接用都不行,查了半天才找到这种__bridge cast配合强转void*的可行方式。
然后运行,发现了标题中的报错信息:
Continue reading…