【发布时间】:2016-10-10 17:05:09
【问题描述】:
我想创建一个动画来移动(或调整)我使用 QML 构建的应用程序窗口。
我有以下代码(大部分是在我们创建QT快速控件应用程序时默认创建的:
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
MainForm.ui.qml
import QtQuick 2.6
import QtQuick.Controls 1.5
import QtQuick.Layouts 1.3
Item {
width: 640
height: 480
property alias button1: button1
property alias button2: button2
RowLayout {
anchors.centerIn: parent
Button {
id: button1
text: qsTr("Press Me 1")
}
Button {
id: button2
text: qsTr("Press Me 2")
}
}
}
main.qml
import QtQuick 2.6
import QtQuick.Controls 1.5
import QtQuick.Dialogs 1.2
ApplicationWindow {
id: mainWindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint
menuBar: MenuBar {
Menu {
title: qsTr("File")
MenuItem {
text: qsTr("&Open")
onTriggered: console.log("Open action triggered");
}
MenuItem {
text: qsTr("Exit")
onTriggered: Qt.quit();
}
}
}
MainForm {
anchors.fill: parent
button1.onClicked: Qt.quit();
button2.onClicked: state = "other";
}
transitions: [
Transition {
from: "*"
to: "other"
NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad; duration: 2000 }
}
]
states: [
State {
name: "other"
PropertyChanges {
target: mainWindow
x: x + 200
}
}
]
MessageDialog {
id: messageDialog
function show(caption) {
messageDialog.text = caption;
messageDialog.open();
}
}
}
使用这段代码,我只是想将我的窗口向右移动 200 像素。当我尝试运行它时,我得到qrc:/main.qml:42 Cannot assign to non-existent property "states"。我认为这很奇怪,因为当我开始输入“状态”并选择自动完成时,它为我构建了整个结构,所以我认为它应该存在......
我是 QML 新手,对现有的几种动画选项并不完全熟悉。这是我根据 QT creator 附带的示例(animation.pro - 转换代码)尝试过的。
我相信应该很简单吧?你能帮我解决这个问题吗?
【问题讨论】:
标签: qt animation window qml qtquick2