Qt Quick 2 iOS Notch 避免

Posted

技术标签:

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

我的应用是全屏的。

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

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

【问题讨论】:

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

以上是关于Qt Quick 2 iOS Notch 避免的主要内容,如果未能解决你的问题,请参考以下文章

第一课:QT Quick项目架构说明

Qt Quick Controls 2 TextArea`tabChangesFocus`,如何使用Tab键更改焦点,而不是键入Tab字符

避免linux + QT中的屏幕撕裂

iOS 怎么避免tableview刷新数据错乱

为啥都不用Qt Quick Controls 2呢

✿4-The Basics-Qt Quick and QML