4

QMLウィジェットのサイズを自動的に変更するにはどうすればよいですか?

QWidget を手動で作成しました。このウィジェットでは、QML コンポーネントを作成しました。

しかし、QWidget のサイズを変更しても、QML コンポーネントのサイズは変更されません。

いくつかのコード...

MyCustomQWidget クラスがあります

ヘッダ:

Class MyCustomQWidget : public QWidget
{
Q_OBJECT
public:
    QDeclarativeView* view;
private:
        QWidget* m_GUI;
public:
    QWidget* getGUI()  {return m_GUI;};
}

ソース:

MyCustomQWidget:: MyCustomQWidget (QWidget *parent) :QWidget(parent)
{
    m_GUI = new QWidget();

    view = new QDeclarativeView(m_GUI);
    view->setSource(QUrl("qrc:/qml/gui.qml"));
    //view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
}

メイン GUI フレーム ウィジェット内

QWidget* pCustomGUI = new MyCustomQWidget(…)
pVLayoutLeft->addWidget(pCustomGUI->getGUI);
4

3 に答える 3

6

質問にはあまり詳細はありませんがQDeclarativeView、QML を表示するために a を使用している場合は、そのsetResizeMode()メンバーを見てください。これを に設定するQDeclarativeView::SizeRootObjectToViewと、探していることが実行される場合があります。QML のルート オブジェクトのサイズが自動的にビューのサイズに変更されます。

于 2011-03-14T10:34:23.563 に答える
2

Qt ウィジェットを別の Qt ウィジェット内に配置する場合は、手動でサイズを変更するか、レイアウトを使用してこれを自動的に行う必要があります。

明示的な親なしでウィジェットを作成し、ウィジェットを追加するときにレイアウトに親を割り当てるのは、やや伝統的です。

ここに 3 層のウィジェットがある理由はよくわかりませんが、カスタム ウィジェットの QDeclarativeView をサブクラス化できないと仮定すると、次のような結果になる可能性があります。

Class MyCustomQWidget : public QWidget
{
Q_OBJECT
private:
    QDeclarativeView* view;
}

MyCustomQWidget:: MyCustomQWidget (QWidget *parent)
    : QWidget(parent)
{
    QHBoxLayout *box = new QHBoxLayout(this);

    view = new QDeclarativeView;
    view->setSource(QUrl("qrc:/qml/gui.qml"));
    //view->setResizeMode(QDeclarativeView::SizeRootObjectToView);

    box->addWidget(view);
}
于 2011-06-13T02:59:49.250 に答える
0
FocusScope
{
     anchors.fill: parent


     [... some qml]
}

これは、FocusScope を親オブジェクト (この場合は QDeclarativeView) のサイズに合わせます。

于 2011-04-27T11:39:53.500 に答える