[Qt-users:409] Re: QMLサンプルソースについての質問

小澤和広 kazuhiro.ozawa @ gmail.com
2015年 1月 5日 (月) 23:38:54 JST


たすく様

早速、お返事いただきありがとうございます。
本件、理解しました。

「Qt QuickではじめるクロスプラットフォームUIプログラミング」
本書は買いました。参考箇所を読み直してみます。

ヘルプに書かれていない件は、バグ報告をしようと思います。
初めてのことですが、やってみます。

以上

2015年1月5日 16:26 Tasuku Suzuki <stasuku @ gmail.com>:

> たすくです。
>
>
> 2015年1月5日 10:55 小澤和広 <kazuhiro.ozawa @ gmail.com>:
> > 小澤です。
> > いつもお世話になっております。
> >
> > Qtサンプルの中にある、quicknanobrowserについて質問があります。
> >
> > quickwindow.qmlに定義されている、
> >
> > property Item currentWebView : tabs.getTab(tabs.currentIndex).item
> >
> > となっています。getTabの戻り値であるItemは、TabViewの上にある
> >
> > WebEngineViewのことだと思いますが、あってますか?
> > それとも、WebViewとの継承関係があるのでしょうか?
>
> TabView の getTab() ですが
> http://doc.qt.io/qt-5/qml-qtquick-controls-tabview.html#getTab-method
> には「Returns the Tab item at index.」と書いてあるので、Tab エレメントのインスタンスが返ってきます。
> http://doc.qt.io/qt-5/qml-qtquick-controls-tab.html
>
> その Tab エレメントは
>
> https://qt.gitorious.org/qt/qtwebengine/source/8c6f087296ec48790c3efd9564c1056802b4c9c0:examples/webengine/quicknanobrowser/quickwindow.qml#L165
> で、TabView::addTab(...) にて追加したものです。
> http://doc.qt.io/qt-5/qml-qtquick-controls-tabview.html#addTab-method
>
> addTab の実装は
>
> https://qt.gitorious.org/qt/qtquickcontrols/source/5fbad0e976b4b603e2f4faccbcb5c052d917ba7a:src/controls/TabView.qml#L115
> を見てみると、
> tabcomp という Component をロードして Tab エレメントを作成し、
> そのエレメントの sourceComponent に addTab で渡された component を設定しています。
>
> Tab エレメントは Loader エレメントを継承していて component の実体化は Loader の機能になります。
> http://doc.qt.io/qt-5/qml-qtquick-loader.html
>
> Loader で生成したアイテムは item プロパティで参照することができます。
> http://doc.qt.io/qt-5/qml-qtquick-loader.html#item-prop
> なので、
> tabs.getTab(tabs.currentIndex)
> は Tab が、
> tabs.getTab(tabs.currentIndex).item
> は tabComponent を Tab (の基底エレメントの Loader) で実体化した WebEngineView が入っている形になります。
>
>
> > また、ヘルプの見方が分かってないのですが、
> >
> > TabView.getTabの戻り値はItemだと思うのですが、なぜわざわざ
> >
> > TabView.getTab(??).itemとするのでしょうか?キャストみたいなもの
> >
> > でしょうか?
>
> 前述のとおり、getTab の戻り値が Tab で、Tab は Loader を継承しているので .item を使用します。
>
>
> > 最後に、ソースコード上では、
> >
> > WebEngineView = Item
> >
> > のように振る舞っていますが、本来のItemはWebEngineViewとは別の
> >
> > オブジェクトだと思いますが、なぜ上記の代入が成立するのでしょうか?
>
> http://doc.qt.io/qt-5/qml-qtwebengine-webengineview.html
> を見ると WebEngineView は基底クラスの記載がありませんが、
> QtQuick 側で見えている WebEngineView の実装である QQuickWebEngineView は
> QtQuick 的には Item である QQuickItem を継承しているため Item として扱うことができています。
>
> https://qt.gitorious.org/qt/qtwebengine/source/54e05945b0ec4328b9d56b3b6a9886fc24ad3e6a:src/webengine/api/qquickwebengineview_p.h#L51
>
> property Item currentWebView の型を WebEngineView に変更するパッチを送るとか、
> WebEngineView の基底クラスに Item って書いていないんだけど、というバグ報告をして直してもらうと
> よりわかりやすくなると思います。
>
>
> > QMLを本格的に始めようとしていますが、いきなり躓いてしまい途方に暮れて
> > います。
>
> 「Qt QuickではじめるクロスプラットフォームUIプログラミング」という書籍の
> 「6.8 エレメントの動的読み込み」の章に今回の Loader や Component.createObject の説明が書いてありますので、
> こちらを読むことをおすすめします。
>
> またいおりさんが書いた「Qt Quickを使いこなすクロスプラットフォームUIプログラミング」にて
> QtQuick Controls の使用のしかたが色々網羅されていますので、こちらも合わせて読んで、自分で色々作ってみるといいと思います。
>
> http://relog.xii.jp/mt5r/2014/08/qt-quick-3.html
> _______________________________________________
> Qt-users mailing list
> Qt-users @ qt-users.jp
> http://qt-users.jp/mailman/listinfo/qt-users
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://qt-users.jp/pipermail/qt-users/attachments/20150105/47375f10/attachment-0001.html>


Qt-users メーリングリストの案内