2

現在、組み込み Linux (ARM Cortex A9) で Qt 5.0.2 を使用するプロジェクトに取り組んでいます。

メインの UI インターフェイスは QML で開発されていますが、このビューを非表示にして QWebView を C++ で直接表示できるようにする必要があります。

QML ビューと QWebView の多くのインスタンスを hide()/show() する単純なビュー コントローラーを c++ でコーディングしました。

非表示/表示方法は正常に機能しますが、QML ビューを表示すると非常に不安定です。QMLオブジェクトは、表示されるべきでなく、フォーカスもバグがあるときに表示されます(または表示されません:p)。オブジェクトも間違った位置に描画されます。

私はいくつかの方法を試します:

-QML ビューを表示するたびに、異なるオブジェクトのフォーカス/可視プロパティを初期化します。

- ビューを表示する前に毎回 .setSource() を使用する

-ビューを表示する前に、rootObject() に感謝して、異なるオブジェクトを update() してみてください。

C ++ビューに切り替えた後、QMLビューを再び機能させるためのヒントはありましたか?

感謝。

4

1 に答える 1

0

もっと良い方法があるかもしれませんが、

おそらく次のようなことができます(私はこれをテストしていません):

注: スロットの実装が間違っている (計算が間違っている) 場合、無限再帰が発生します。

//this code could probably be in the constructor
real widthOverHeightRatio = 2;//set this value to what you want, or what it is when user first presses shift depending on the use case.

QObject::connect(this, SIGNAL(widthChange()), this, SLOT(onWidthChanged()));
QObject::connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));

//don't forget to define these slots in the header

//implemented slots
void MyClass::onWidthChanged()
{
   if(width/height!=widthOverHeightRatio){
      height = width/widthOverHeightRatio;
   }
}

void MyClass::onHeightChanged()
{
   if(width/height!=widthOverHeightRatio){
      width = height*widthOverHeightRatio;
   }
}
于 2015-04-09T19:59:58.537 に答える