1

我在 Mac OS X 上使用 QT 和 c++。关闭我的应用程序时,我使用hide()来保持我的应用程序运行并隐藏窗口。

但是之后,当我在Dock中单击我的应用程序的图标时,它就不再显示了。

我在这里读到使用以下代码而不是 hide() 应该可以解决此问题:

ProcessSerialNumber pn;
GetFrontProcess (&pn);
ShowHideProcess(&pn,false);

但我不知道如何使用该代码:s 有人可以解释如何使用该代码,或者如何解决我的问题吗?

谢谢!

4

2 回答 2

2

您可以在 Qt 应用程序中编译 Objective-C,然后执行以下操作:

将此添加到您的.pro文件中:

macx {

    LIBS += -framework Foundation
    LIBS += -framework AppKit

    OBJECTIVE_SOURCES += objectivec.mm
    HEADERS +=  objectivec.h
}

创建一个名为objective.h的文件:

#ifndef __ObjectiveC_h_
#define __ObjectiveC_h_


class ObjectiveC
{
public:
    static void HideWindow();
};

#endif

另一个叫做objective.mm

#include "objectivec.h"
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import <CoreData/CoreData.h>

void ObjectiveC::HideWindow()
{
    [NSApp hide:nil];
}

然后在任何你喜欢的地方使用它:

#ifdef Q_OS_MAC
   #include "objectivec.h"
#endif

#ifdef Q_OS_MAC
   ObjectiveC *obc = new ObjectiveC();
   obc->HideWindow();
#endif
于 2017-05-27T17:50:39.230 回答
0

您正在谈论的代码是本机 OSX API。我在外国领土,但我将尝试在这里创造魔法:

为了ProcessSerialNumber

//either
#include <Carbon/Carbon.h> 
#include <Cocoa/Cocoa.h>

为了GetFrontProcess (&pn);

文档

GetFrontProcess 函数返回在前台运行的进程的进程序列号。如果检测到错误,则返回“undef”。

签名:

 //carbon or cocoa
 OSErr GetFrontProcess (ProcessSerialNumber *PSN);

为了ShowHideProcess(&pn,false);

签名:

 #include <Carbon/Processes.h> //carbon only?
 OSErr ShowHideProcess(const ProcessSerialNumber *psn, Boolean visible)
于 2012-08-24T15:05:58.643 回答