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 矩形的几何图形,最好的解决方案是什么?

更新。找到了一种解决方案。请参阅 Amit Tomar 的答案。但是是否存在更简单的解决方案,例如,使用QtQuick 5.0: Qt Quick Window QML Types

4

2 回答 2

6

您正在更改 qml 的几何形状,而不是查看器。为此:

  1. 查看器的几何形状可以使用您在主函数中创建的 QmlApplicationViewer 对象进行更改。
  2. 但是该对象是 C++ 中的,因此您需要向 qml 公开一个 C++ 函数,并在单击此按钮时调用该函数。

脚步:

  1. 创建一个类并将在 main.cpp 中创建的应用程序查看器对象存储在该类中以供进一步调用。
  2. 将此类中的函数公开给 qml。该函数应该能够使用存储在类中的应用程序查看器对象来修改大小。
  3. 单击 qml 矩形时,调用此函数。

主文件

#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();
}

我的班级.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 回答
2

ApplicationWindow桌面控件为您提供所需的窗口大小调整功能:

import QtQuick 2.0
import QtQuick.Controls 1.0

ApplicationWindow {
    id: container
    width: 360
    height: 360
    color: "Red"

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

注意:我不能只使用parent.heightin onClicked-- 我必须通过 id 来引用窗口。

于 2014-04-03T16:10:20.060 回答