ios - QT如何改变应用程序窗口z索引

标签 ios objective-c qt uiview qml

我试图将 native iOS 播放器作为自定义 QML 组件并设法做到这一点,感谢 this .但是,我遇到了组件的 z 顺序问题。

组件构造函数:

MyVideoView::MyVideoView(QQuickItem *parent /*= 0*/)
    : QQuickItem(parent)
    , m_view(0)
{
    connect(this, SIGNAL(windowChanged(QQuickWindow*)), this, SLOT(onWindowChanged(QQuickWindow*)));
    connect(this, SIGNAL(visibleChanged()), this, SLOT(onVisibleChanged()));
}

onWindowChanged 实现:

void MyVideoView::onWindowChanged(QQuickWindow* window)
{
    if(!m_view) {
    }
    if (window != 0) {

        UIView *parentView = reinterpret_cast<UIView *>(window->winId());

                AVPlayer *_player;
                AVURLAsset *_asset;
                AVPlayerItem *_playerItem;
                AVPlayerLayer *m_playerLayer;

                _player = [[AVPlayer alloc] init];
                NSURL *baseURL = [[NSURL alloc] initWithString: @"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
                _asset = [AVURLAsset assetWithURL:baseURL];
                _playerItem = [AVPlayerItem playerItemWithAsset: _asset];
                [_player replaceCurrentItemWithPlayerItem:_playerItem];
                m_playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];

                m_playerLayer.frame = CGRectMake(this->x(), this->y(), this->width(), this->height());

                [parentView.layer addSublayer:m_playerLayer ];

                [_player play];


    } else {
        [m_view removeFromSuperView];
    }
}

我可以在我的应用程序中使用该组件,它是一个 ApplicationWindow,但问题是,该组件始终位于顶部,覆盖整个应用程序,即使我设置:

MyVideoView {
    z:-3
    width: 300
    height: 200
    x:20
    y:300
}

或者将另一个组件的 z 放到例如300。 我认为这是因为 QQuickWindow或由 UIView 引起。 编辑:MyVideoView 放置在 Item 组件中

我想要实现的是:

  • 要么可以设置组件的 z 顺序
  • 或获取应用程序“背后”的组件(在我的应用程序上创建透明部分以便视频可见,这不是最佳解决方案,但我没有其他选择)

有没有办法实现其中之一,或者如果组件是 QQuickItem 之外的其他东西,是否可以实现,因为我真正需要的唯一部分是播放器层,因为我'会创建自定义播放控制界面吗?

最佳答案

QQuickWindow 是一个 UIView。单个 QML 项不是,因此您不能将另一个 UIView(或其层)“放入”QML 应用程序“内部”,除非您将应用程序构建为顶级 QQuickWindow使用额外的子 QQuickWindow,然后将视频层夹在这些 Qt Quick 窗口 (QWindows) 之间。

关于ios - QT如何改变应用程序窗口z索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54287152/

相关文章:

ios - 从在线 URL 播放视频有效,但从本地路径播放视频无效

ios - Swift 3 中 UIAlertController 中的自动换行

jquery - 移动设备上的 ScrollTop

ios - 架构 arm64 的 undefined symbol - JSClassCreate

ios - 导航栏的实时模糊效果

javascript - 下载图像并将其转换为 QML 中的数据 URI

objective-c - 如何在代码中访问 NSTextField 中的 NSNumberFormatter 属性

iphone - 类似于 App Store 特色横幅的旋转横幅

c++ - 我怎样才能把这个qt程序放到一个源代码文件中

python - 从 pyside/opencv 访问网络摄像头