最小化到停靠后恢复Qt应用程序,使用OS X上的扩展坞快捷方式
Restoring Qt app after minimized to dock, using dock shortcut on OS X
单击程序坞中的应用程序图标将启动该应用程序,或者,如果应用程序已打开,则会将您切换到该应用程序并打开该应用程序中所有打开的窗口。
在我的Qt应用程序中,我没有看到这种行为。我有一个停靠快捷方式,我最小化了停靠上的应用程序,如果我单击最小化的实例,应用程序将恢复。
如果我单击Dock(Dock快捷方式(中的应用程序图标,则没有任何反应。
(我可以右键单击,然后"显示所有窗口" - 但这与所有其他应用程序的行为不同(
我试图放置这个答案中的代码:https://stackoverflow.com/a/15363738/1217150
放置qDebug
语句,
if(test) qDebug("registered");
在构造函数中,以及
void MyApplictionClass::onClickOnDock()
{
qDebug("dock clicked");
}
启动时,我收到两条消息...但是在最小化后或启动后的任何时间,对单击或双击停靠快捷方式没有任何反应。
完整代码插入:
MyApplicationClass.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
不属于班级......我只是不知道他们在哪里拥有它...当我注册它时,我必须给它论据,否则它拒绝建造。不过,它似乎确实如此...东西。。。只是不对劲。在该代码中,我看不到应用程序对单击停靠站的反应。
这是正确的方法吗?或者,当我的应用程序被单击其停靠快捷方式时,如何让我的应用程序恢复?
(OSX 10.6-10.9,Qt 4.8(
如果你指的是这个:OS X上的QT,如何检测点击应用程序Dock Icon,onClickOnDock不应该是该类的成员。
您可以将其作为普通函数放在 MyApplicationClass.cpp 文件中。
在Qt 5.9.1中有一个黑客,当你可以在没有平台特定代码的情况下实现onClickOnDock((。见 https://stackoverflow.com/a/46488514/8695355
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- C++中的VLA,扩展名为std=C++11
- "ostream &os"有什么用?
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- libprotobuf 检查在 Mac OS 上执行程序时失败
- C++返回 Numpy 数组的 Python 扩展模块
- 扩展可变参数模板中的变量名称
- 扩展C++生成的代码的模板参数类型名称
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 将元组类型扩展为可变参数模板?
- 如何按文件扩展名引用文件夹中的文件
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 最小化到停靠后恢复Qt应用程序,使用OS X上的扩展坞快捷方式
- OS X 将扩展与应用程序关联
- 在WinAPI、POSIX或API-OS等价物的其他扩展中,是否存在来自C++11的所有级别的内存屏障