QT/C++,OS X:退出应用程序时可选择隐藏(),以便应用程序继续运行,并在单击dock中的图标后再次显示

QT/C++, OS X: Alternative for hide() when quiting app so that app keeps running and shows up again after clicking icon in dock

本文关键字:应用程序 dock 单击 运行 显示 图标 继续 OS C++ 退出 QT      更新时间:2023-10-16

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

但之后,当我点击停靠区中的应用程序图标时,它就不再显示了。

我在这里读到,使用以下代码而不是hide()应该可以修复这种行为:

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

但我不知道如何使用该代码:s有人能解释一下如何使用这个代码,或者如何解决我的问题吗?

谢谢!

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

另一个被称为物镜.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

您所说的代码是本机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)