【发布时间】:2015-04-16 09:32:00
【问题描述】:
我用谷歌搜索了很多,但仍然找不到好的解决方案:/
所以,我正在将一个复杂的 Qt5 应用程序(某些网络服务的客户端)移植到 Mac OS X(10.7.0 “Lion”及更高版本)。
我需要处理像 *.xyz 这样的自定义文件和像 xyz:// 这样的自定义 URL 方案。
好的,Qt5 有 QFileOpenEvent 类来处理 OS X 相应的事件。
但是:此事件仅在应用程序事件循环开始后到达(显然)!
我需要“捕捉”并处理 OS X 的文件打开事件之前 main 开始,因为程序逻辑设计为只处理命令行参数处理。 p>
简化的main功能码:
int main(int argc, char[]* argv)
{
QApplication app( argc, argv );
QStringList arguments = app.arguments();
if( arguments.count() == argc ) arguments.removeFirst();
Logic appLogic( NULL, &app );
app.installMessageHandler( &appLogic );
// The problem:
// **This function will always called earlier than the any event**
if( ! appLogic.start( arguments ) ) return 0;
// Start processing of events
// Only after this call Logic class get the desired event
return app.exec();
}
有没有办法在 C++ main 函数启动之前 获取 OS X 的文件打开事件,或者在 argv 参数中获取“我的”文件/url?
也许,一些Objective-C 黑魔法可以完成这项工作?
注意:start 做了许多复杂且异步的事情。事件在执行期间到达,因此当异步内容已经工作时很难处理它。所以看起来我只需要阻止 start 执行,如果事件将到达。
如果应用程序已经打开,则没有问题。
【问题讨论】: