5

私は Qt Creator 2.6.1 を持っています。プロジェクト テンプレートからシンプルな Qt Qucik 2.0 プロジェクトを作成し、main.qml ファイルを変更しました。

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360

    color: "red"

    MouseArea {
        anchors.fill: parent
        onClicked: parent.height = 180
    }
}

長方形をクリックすると、半分に縮小する必要があります。そして、それは発生しますが、ウィンドウは縮小されません。

メインウィンドウがメインqml長方形のジオメトリを繰り返さなければならない場合、最善の解決策は何ですか?

アップデート。1 つの解決策が見つかりました。Amit Tomarの回答を参照してください。しかし、 QtQuick 5.0: Qt Quick Window QML Typesを使用するなど、より簡単なソリューションはありますか?

4

2 に答える 2

6

ビューアーではなく、qmlのジオメトリを変更しています。そうするために:

  1. ビューアのジオメトリは、メイン関数で作成したQmlApplicationViewerオブジェクトを使用して変更できます。
  2. ただし、そのオブジェクトはC ++であるため、C ++関数をqmlに公開し、このボタンをクリックしてその関数を呼び出す必要があります。

手順:

  1. クラスを作成し、main.cppで作成されたアプリケーションビューアオブジェクトをこのクラス内に保存して、さらに呼び出します。
  2. このクラスの関数をqmlに公開します。この関数は、クラスに格納されているアプリケーションビューアオブジェクトを使用してサイズを変更できる必要があります。
  3. qml長方形をクリックすると、この関数を呼び出します。

main.cpp

#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include "qdeclarativecontext.h"

#include "myclass.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QmlApplicationViewer *viewer = new QmlApplicationViewer();

    MyClass myClassObject(viewer);
    viewer->rootContext()->setContextProperty("myViewer", &myClassObject);
    viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer->setMainQmlFile(QLatin1String("qml/untitled/main.qml"));
    viewer->showExpanded();

    return app.exec();
}

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include "qmlapplicationviewer.h"

class MyClass : public QObject
 {
     Q_OBJECT

 public:

    MyClass( QmlApplicationViewer * p ) { internalViewer = p ; }
    Q_INVOKABLE void viewerResize(int x, int y, int length, int breadth)

     {
       internalViewer->setGeometry(internalViewer->x(),internalViewer->y(),length,breadth);
     }

private:

    QmlApplicationViewer *internalViewer;
 };

#endif // MYCLASS_H

main.qml

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360
    Text {
        text: "Hello World"
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked:
        {
            myViewer.viewerResize(0,0,110,110)
        }
    }
}
于 2013-01-19T22:26:31.403 に答える