QT / C ++,OS X:退出应用程序时hide()的替代方案,以便应用程序保持运行并在单击Dock中的图标后再次显示

时间:2012-08-24 09:48:46

标签: c++ macos qt

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

但是当我点击停靠栏中的应用图标后,它就不再出现了。

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

代表ProcessSerialNumber

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

代表GetFrontProcess (&pn);

Documentation

  

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)

答案 1 :(得分:0)

您可以在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