OGeek|极客世界-中国程序员成长平台

标题: ios - QT如何更改应用程序窗口z索引 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 21:53
标题: ios - QT如何更改应用程序窗口z索引

我试图将原生 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:nWindowChanged(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 组件内

我想要实现的是:

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



Best Answer-推荐答案


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

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






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4