菜鸟教程小白 发表于 2022-12-11 21:53:56

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


                                            <p><p>我试图将原生 <code>iOS</code> 播放器作为自定义 <code>QML</code> 组件并设法做到了,这要归功于 <a href="https://github.com/seyedmmousavi/Native-UITextView-on-Qt-KDAB" rel="noreferrer noopener nofollow">this</a> .但是我遇到了组件的 z 顺序问题。</p>

<p>组件构造函数:</p>

<pre><code>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()));
}
</code></pre>

<p>onWindowChanged 实现:</p>

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

      UIView *parentView = reinterpret_cast&lt;UIView *&gt;(window-&gt;winId());

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

                _player = [ init];
                NSURL *baseURL = [ initWithString: @&#34;http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8&#34;];
                _asset = ;
                _playerItem = ;
                ;
                m_playerLayer = ;

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

                ;

                ;


    } else {
      ;
    }
}
</code></pre>

<p>尽管如此,我可以在我的应用程序中使用 <code>ApplicationWindow</code> 组件,但问题是,该组件始终位于顶部,即使我设置了也覆盖了整个应用程序:</p>

<pre><code>MyVideoView {
    z:-3
    width: 300
    height: 200
    x:20
    y:300
}
</code></pre>

<p>或者把另一个组件的 z 放到例如<code>300</code>。
我认为这是因为 <a href="http://doc.qt.io/qt-5/qquickwindow.html" rel="noreferrer noopener nofollow">QQuickWindow</a>或由 <code>UIView</code> 引起。
编辑: <code>MyVideoView</code> 放置在 <code>Item</code> 组件内</p>

<p>我想要实现的是:</p>

<ul>
<li>可以设置组件的 z 顺序</li>
<li>或获取应用程序“背后”的组件(在我的应用程序上创建透明部分以便视频可见,这不是最好的解决方案,但我已经没有选项了)</li>
</ul>

<p>有没有办法实现其中之一,或者如果组件是 <code>QQuickItem</code> 之外的其他东西,是否可以完成,因为我真正需要的唯一部分是播放器层,因为我'会创建自定义播放控制界面吗? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>QQuickWindow</code> 是一个 <code>UIView</code>。单个 QML 项目不是,因此您不能将另一个 <code>UIView</code>(或其层)放置在 QML 应用程序“内部”,除非您将应用程序构造为顶级 <code>QQuickWindow</code>带有额外的子 <code>QQuickWindow</code>,然后将视频层夹在那些 Qt Quick 窗口(<code>QWindows</code>)之间。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - QT如何更改应用程序窗口z索引,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/54287152/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/54287152/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - QT如何更改应用程序窗口z索引