博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT 实现Dock应用程序点击 ---Mac OS X
阅读量:4032 次
发布时间:2019-05-24

本文共 2169 字,大约阅读时间需要 7 分钟。

在mac 下应用场景如下:

1、点击关闭窗口按钮时,不退出应用。

2、点击dock应用图标时候显示应用程序住窗口。

应用的显示和隐藏不是本文重点,实现点击dock应用图标在QT获取对应通知是本文关键。

在写之前参考了

但是编译通不过。

修改一些编译错误,能正常工作。

1、编译开关和工程配置。

在xcode中设置Build Settings->Apple Clang - Preprocessing -> Enable Strict Checking of objc_msgSend Calls ,关闭Strict检查

否则会报错

objc_msgSend  requires 0 arguments, but 2 were provided

或者

error: no matching function for call to 'objc_msgSend'

但是QT没有Enable Strict Checking of objc_msgSend Calls,经过查看mesage源代码,pro配置如下:

macx {    LIBS += -framework CoreFoundation    LIBS += -lobjc    LIBS += -framework AppKit    DEFINES += OBJC_OLD_DISPATCH_PROTOTYPES}

2、代码

#ifdef Q_OS_MAC#include 
#include
bool applicationShouldHandleReopen(id self,SEL _cmd,...);#endifvoid setupDockClickEvent();#ifdef Q_OS_MACbool applicationShouldHandleReopen(id self,SEL _cmd, ...){ qDebug()<<__FUNCTION__; // Return NO (false) to suppress the default OS X actions return false;}#endifvoid setupDockClickEvent(){#ifdef Q_OS_MAC Class cls = objc_getClass("NSApplication"); id appInstance = objc_msgSend(cls, sel_registerName("sharedApplication")); if(appInstance != nullptr) { id appDelegate = objc_msgSend(appInstance, sel_registerName("delegate")); Class delClass = objc_msgSend(appDelegate, sel_registerName("class")); SEL shouldHandle = sel_registerName("applicationShouldHandleReopen:hasVisibleWindows:"); if (class_getInstanceMethod(delClass, shouldHandle)) { if (class_replaceMethod(delClass, shouldHandle, reinterpret_cast
(applicationShouldHandleReopen), "B@:")) qDebug() << "Registered dock click handler (replaced original method)"; else qWarning() << "Failed to replace method for dock click handler"; } else { if (class_addMethod(delClass, shouldHandle, reinterpret_cast
(applicationShouldHandleReopen),"B@:")) qDebug() << "Registered dock click handler"; else qWarning() << "Failed to register dock click handler"; } }#endif}

在main.cpp中

int main(int argc, char *argv[]){    setupDockClickEvent();}

 

转载地址:http://ttebi.baihongyu.com/

你可能感兴趣的文章
一文看清HBase的使用场景
查看>>
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
深入理解Apache Flink核心技术
查看>>
SpringCloud 各组件原理图,面试必备
查看>>
面试题总结:可能是全网最好的MySQL重要知识点
查看>>
MySQL面试之数据库索引
查看>>
完整的项目管理流程,看清PMP42个过程的执行顺序
查看>>
设计模式,面试速记手册1
查看>>
设计模式,面试速记手册2
查看>>
备受面试官青睐的 Java NIO,到底和传统 IO 有啥不一样
查看>>
各大公司Java面试题超详细总结
查看>>
搞定MySQL之面经(一)
查看>>
排序算法,看这一篇就够了,含动图+Java实现
查看>>
性能指标:QPS、TPS、系统吞吐量理解
查看>>
搞清 适配器模式、代理模式和装饰者模式的不同
查看>>
一次完整的HTTP请求过程
查看>>
HTTP 与 HTTPS 的区别
查看>>
SVN E200030: There are unfinished transactions detected
查看>>