【问题标题】:Set windows size of QuickLook Plugin设置 QuickLook 插件的窗口大小
【发布时间】:2013-11-25 00:19:56
【问题描述】:

我正在构建一个 QuickLook 插件。我想更改用户按空格键时弹出的窗口的宽度。

我读过项目的 info.plist 文件中有两个键,其中高度和宽度是可自定义的。即使我更改了这些值,我也无法将预览窗口的大小设置为我想要的大小。

我不知道还能尝试什么。有什么想法吗?

谢谢!

【问题讨论】:

    标签: objective-c cocoa quicklook


    【解决方案1】:

    我想我会对此进行一些研究。我没有尝试过以下任何建议,所以没有人抱有希望。我假设您正在使用生成器回调:

    OSStatus (*GeneratePreviewForURL)(
        void *thisInterface,
        QLPreviewRequestRef preview,
        CFURLRef url,
        CFStringRef contentTypeUTI,
        CFDictionaryRef options
    );
    

    首先,您可以手动检查options 字典参数并验证kQLPreviewPropertyWidthKeykQLPreviewPropertyHeightKey 键确实映射到所需的CFNumber 值。

    Apple QuickLook 编程指南提到这些属性中的每一个:

    注意这个属性是一个提示;快速查看可能会设置宽度 自动用于某些类型的预览。值必须是 封装在 CFNumber 对象中。

    编辑:如果您的预览表示是灵活的,您可以尝试根据上面的陈述找到 QuickLook 支持您的尺寸提示的预览类型。只是一个想法。)

    在 QuickLook 框架二进制文件上运行 nm 会发现一些未记录的 kQLPreviewProperty-- 常量以及上述宽度和高度键。引起我注意的是kQLPreviewPropertyAutoSizeKey。回想一下 Apple 关于忽略自动设置大小提示的声明,这可能很重要?按照QuickLook.framework/Headers/QLBase.h 中的约定,您可以尝试声明

    extern const CFStringRef kQLPreviewPropertyAutoSizeKey;
    

    然后您可以尝试将 CFNumber 0 与 options 字典中的该属性键相关联。还有其他未记录的注意键,例如kQLPreviewPropertyAttributesKey

    回到你提到的 Info.plist,Apple says 关于这些键 QLPreviewWidthQLPreviewHeight

    这个数字给 Quick Look 一个关于宽度(以磅为单位)的提示 预览。 如果生成器花费的时间太长,它会使用这些值 生成预览。(已添加重点)

    这就是有人提出在你的生成器中调用 sleep() 的糟糕建议的地方。但我很困惑为什么 Apple 会根据生成器延迟来遵循大小提示。 (?)

    编辑:还要注意上面的声明,Info.plist 提示必须以点(而不是像素)表示,unit 取决于用户的屏幕分辨率。

    【讨论】:

    • 生成器会创建图像或 HTML,因此默认情况下预览将基于它们的自然尺寸,不是吗?
    • @Keniger,这很有趣。我想知道 CSS min-width 属性在 HTML 预览中会产生什么影响。
    • 感谢大家的帮助。我已经尝试添加最小宽度。它会更改它自己的“html”的大小,但不会更改 quicklook 插件窗口的大小。窗口总是从相同的大小...
    • @jrodatus 我给你赏金,我仍然有这个问题,但你真的花了一些时间在这上面,所以我真的很感谢你的工作!我会继续研究,如果我发现了什么,我会在这里更新答案!谢谢!!
    • 谢谢安德烈斯,虽然我希望你能给真正帮助过的人:-/
    【解决方案2】:

    最近我自己开发了一个快速查看插件,它使用 HTML+CSS 并遇到了同样的问题。 我的解决方案是不在 Xcode 和 qlmanage 中测试插件作为可执行文件,而是从我的用户库中尝试 real .qlgenerator

    从我的用户库调用生成器时,快速查看窗口的大小完全按照我在 *-Info.plist 中指定的方式调整。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,可能会提供一些线索:在我的例子中,我正在为我的自定义文件格式生成图像快速预览。我启动预览上下文以使用

      绘制我的预览

      CGContextRef QLPreviewRequestCreateContext(QLPreviewRequestRef preview, CGSize size, Boolean isBitmap, CFDictionaryRef properties);

      奇怪的是,如果我将 isBitmap 设置为 true,快速查看会将预览面板大小调整为为上下文指定的大小(至少达到一定大小)。但如果将 isBitmap 设置为 false,它似乎会忽略上下文大小,而是始终显示全尺寸预览面板,其中矢量图形图像缩放以覆盖整个面板。

      因此,如果您使用位图图形预览上下文,预览面板似乎将设置为您指定的上下文的大小。但是,在使用矢量图形预览上下文(这是我想要的)时,我还没有找到任何方法来设置面板的大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        相关资源
        最近更新 更多