gpt4 book ai didi

c++ - 在最小化停靠后恢复 Qt 应用程序,在 OS X 上使用停靠快捷方式

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:29 24 4
gpt4 key购买 nike

单击 Dock 中的应用程序图标可启动该应用程序,或者如果该应用程序已打开,则将您切换到该应用程序并显示该应用程序中所有打开的窗口。

在我的 Qt 应用程序中,我没有看到这种行为。我有一个停靠栏快捷方式,我最小化停靠栏上的应用程序,如果我单击最小化的实例,应用程序将恢复。

如果我单击 Dock 中的应用程序图标(dock 快捷方式),则没有任何反应。

(我可以右键单击,然后“显示所有窗口” - 但这与所有其他应用程序的行为不相似)

我试图放置来自这个答案的代码:https://stackoverflow.com/a/15363738/1217150

放置qDebug语句,

if(test) qDebug("registered");

在构造函数中,和

void MyApplictionClass::onClickOnDock()
{
qDebug("dock clicked");
}

在启动时,我收到两条消息...但是在最小化之后,或在启动后的任何时间,单击或双击停靠栏快捷方式都没有反应。

完整代码插入:

我的应用程序类.h:

#include <objc/objc.h>    
#include <objc/message.h>
class MyApplicationClass: public QApplication
{
....
bool dockClickHandler(id self, SEL _cmd, ...);
void onClickOnDock();
};

我的应用程序类.cpp:

MyApplicationClass::MyApplicationClass()
{
....
objc_object* cls = objc_getClass("NSApplication");
SEL sharedApplication = sel_registerName("sharedApplication");
objc_object* appInst = objc_msgSend(cls, sharedApplication);
if(appInst != NULL)
{
objc_object* delegate = objc_msgSend(appInst, sel_registerName("delegate"));
objc_object* delClass = objc_msgSend(delegate, sel_registerName("class"));
const char* tst = class_getName(delClass->isa);
bool test = class_addMethod((objc_class*)delClass,
sel_registerName("applicationShouldHandleReopen::hasVisibleWindows:"),
(IMP)dockClickHandler(appInst, sharedApplication), "B@:");
if(!test) qDebug("not registered");
else qDebug("registered");
}
.....
}

bool MyApplicationClass::dockClickHandler(id self, SEL _cmd, ...)
{
Q_UNUSED(self)
Q_UNUSED(_cmd)
onClickOnDock();
return true;
}

void MyApplicationClass::onClickOnDock()
{
qDebug("dock clicked");
}

也许我做错了什么?有一些我不明白的东西......被引用的帖子有 dockClickHandler 不是类(class)的一部分......我只是不知道他们在哪里......我不得不当我注册它时给它参数,否则它拒绝构建。不过,它似乎在做……某事……只是做错了事。在该代码中,我看不到应用会在何处对单击停靠栏使用react。

这是正确的做法吗?或者,如何在单击停靠栏快捷方式时恢复我的应用程序?

(OSX 10.6-10.9,Qt 4.8)

最佳答案

如果您指的是这个:QT on OS X, how to detect clicking the app Dock Icon , onClickOnDock 不应是该类的成员。

您可以将其作为普通函数放入 MyApplicationClass.cpp 文件中。

关于c++ - 在最小化停靠后恢复 Qt 应用程序,在 OS X 上使用停靠快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com