如何在 macOS 上为 Qt 窗口使用 Objective-C 变量和方法?
Posted
技术标签:
【中文标题】如何在 macOS 上为 Qt 窗口使用 Objective-C 变量和方法?【英文标题】:How do I use Objective-C variables and methods for a Qt window on macOS? 【发布时间】:2018-04-18 07:10:01 【问题描述】:我在 Qt 项目中有以下代码,我想在 Objective-C 中将窗口的 titlebarAppearsTransparent 变量设置为 true。程序编译正确,但是当它到达 [&w titlebarAppearsTransparent:YES];
时它崩溃了我正在尝试做的事情是否可能,如果可以,我该如何解决?
#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>
#include <QDir>
#include "globals.h"
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import <AppKit/NSWindow.h>
int main(int argc, char *argv[])
QApplication a(argc, argv);
QApplication::setOrganizationName("Siddha Tiwari");
QApplication::setApplicationName("NarwhalEdit");
MainWindow *w = new MainWindow();
[&w titlebarAppearsTransparent:YES];
setTheme(true);
w->show();
return a.exec();
【问题讨论】:
目前无法测试,但您是否查看过 bugtracker here ?特别是看cmets中的代码。 值得注意的是,您可以将 Qt QtMacExtras 类与 Qt 一起使用,虽然这并不是真正混合代码,但您仍然可以在这些帖子 Mixing Qt C++ with Objective-C .. 和 Calling Objective-C method from C++ method? 之后混合代码 @S.Monteleone 谢谢,bugtracker 中的解决方案奏效了 @SiddhaTiwari:很高兴它成功了。为了方便起见,我写下了完整的答案。 【参考方案1】:可以使用 native API 来完成此操作,正如 here 所报告的那样,从 QWidget::window(): 获取 NSWindow 指针: winId().
我还建议使用条件编译指令包装代码,因此在为其他平台编译时会被忽略。
这是一个 sn-p(假设 w 是指向您的 QMainWindow 的指针):
#ifdef Q_OS_MAC
QCoreApplication::setAttribute( Qt::AA_DontCreateNativeWidgetSiblings );
NSView *nsview = ( __bridge NSView * )reinterpret_cast<void *>( w->window()->winId() );
NSWindow *nswindow = [nsview window];
nswindow.titlebarAppearsTransparent = YES;
#endif
【讨论】:
以上是关于如何在 macOS 上为 Qt 窗口使用 Objective-C 变量和方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 macos 上为 ffmpeg 启用 libx264
如何在 macOS 上为 IntelliJ 项目安装 Google OR-Tools
如何在 MacOS (sierra-catalina) 上为分区获取可用空间