gpt4 book ai didi

qt - 如何在运行时以编程方式更改主窗口的几何形状 w.r.t QML?

转载 作者:行者123 更新时间:2023-12-04 12:54:10 25 4
gpt4 key购买 nike

我有 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 ?

最佳答案

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

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

  • 脚步:
  • 创建一个类并将在 main.cpp 中创建的应用程序查看器对象存储在该类中以供进一步调用。
  • Expose a function in this class to qml.此函数应能够使用存储在类中的应用程序查看器对象来修改大小。
  • 单击 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

    主文件
    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)
    }
    }
    }

    关于qt - 如何在运行时以编程方式更改主窗口的几何形状 w.r.t QML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418811/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com