如何在 macOS 上为 Qt window 使用 Objective-C 变量和方法?

How do I use Objective-C variables and methods for a Qt window on macOS?

我在 Qt 项目中有以下代码,我想在 Objective-C 中将 window 的 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();
}

据报道here,使用本机API可以实现此目的,获得NSWindow 来自 QWidget::window()::winId().

的指针

我还建议用条件编译指令包装代码,这样在为其他平台编译时它会被忽略。

这是一个片段(假设 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