【问题标题】:Qt Quick 2 iOS Notch AvoidanceQt Quick 2 iOS Notch 避免
【发布时间】:2019-04-05 14:27:12
【问题描述】:

我的应用是全屏的。

在使用 QT Quick 2 时,如何避免在带有凹槽的 iOS 设备上将物品放在凹槽和主线后面?

我的应用在有和没有凹槽的设备上运行,我试图避免在没有凹槽的设备的顶部和底部出现空白区域。

【问题讨论】:

  • 放一些东西作为占位符,然后用一个清晰​​的矩形挡住它?
  • 是的,但是我的应用程序也可以在没有缺口的设备上运行。我不希望在没有凹槽的设备的顶部和底部出现空白
  • 我用 Qt 定位 linux、windows 和 android,但没有做过 ios。是所有ios上的缺口吗?如果是这样,您可以编写一个 c++ 函数来使用#if defined(Q_OS_IOS) 检索操作系统。如何检测缺口何时存在?如果您可以检测到它,那么您可以使该占位符仅在存在缺口时可见。

标签: c++ ios qt qml


【解决方案1】:

如果其他人也有同样的问题。

首先让您的应用在 iOS 上不是全屏,这会在您的应用顶部和底部创建黑色区域。

您可以更改黑色区域的颜色以更好地适应您的应用:

notch.h

#ifndef NOTCH_H
#define NOTCH_H

#include <QObject>

class Notch : public QObject{
  Q_OBJECT
public:
  Notch();
};

#endif

notch.mm

#include <UIKit/UIKit.h>
#include "notch.h"

Notch::Notch()
{
    //Top
    UIView *statusBar = (UIView *)[[UIApplication sharedApplication] valueForKey:@"statusBar"];
    statusBar.backgroundColor = [UIColor colorWithRed:0.09 green:0.14 blue:0.19 alpha:1.0];

    //Bottom
    UIApplication *app = [UIApplication sharedApplication];
    app.windows.firstObject.backgroundColor = [UIColor whiteColor];
}

现在只需调用 Notch();在你的 main.cpp 文件中

【讨论】:

    【解决方案2】:

    我联系了 QT 支持并得到了真正的答案。 在全屏运行应用时使用安全区域边距。

     #include <qpa/qplatformwindow.h>
    
     void MainWindowBackend::setWindow(QObject *window)
     {
          QWindow *qwin = qobject_cast<QWindow*>(window);
          QPlatformWindow *pWin = qwin->handle();
          QMargins safeArea = pWin->safeAreaMargins();
     }
    

    还加

     QT += gui-private
    

    在您的专业文件中

    【讨论】:

    • 您能否提供更多关于您的情况的 MainWindowBackend 的信息?
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多