我有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?
答案 0 :(得分:6)
您正在更改qml的几何图形,而不是Viewer。为此:
步骤:
的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)
}
}
}
答案 1 :(得分: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.height
中使用onClicked
- 我必须通过ID引用该窗口。