如何在 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
我在 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