Si sta modificando la geometria del qml, non del Viewer. Per fare ciò:
- La geometria del visualizzatore può essere modificata utilizzando l'oggetto QmlApplicationViewer che avresti creato nella funzione principale.
- Ma quell'oggetto è in C++, quindi è necessario esporre una funzione C++ a qml e chiamare tale funzione al clic di questo pulsante.
Passi:
- Creare una classe e memorizzare l'oggetto spettatore applicazione creata nel main.cpp, all'interno di questa classe per le chiamate successive.
- Expose a function in this class to qml. Questa funzione deve essere in grado di modificare la dimensione utilizzando l'oggetto visualizzatore applicazioni memorizzato nella classe.
- Al clic del rettangolo qml, chiamare questa funzione.
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)
}
}
}
fonte
2013-01-19 22:26:31
Sì, questo è lavoro! Ma esiste una soluzione più semplice? Ad esempio, utilizzando "QtQuick 5.0: QM Qt Quick Window Tipi"? – Milovidov