我正在使用Kubuntu 11系统并尝试我的第一个Qt Quick项目.因为这是Kubuntu,我只是运行它附带的Qt,到目前为止工作正常.
我让Qt Creator从Qt Quick创建了样本"Hello World"项目.但是设计按钮显示为灰色,运行按钮也是如此.
首先,当我进入"运行设置"下的项目菜单时,它说Qt版本:[无效的Qt版本].按下"Manage Qt versions"按钮会弹出一个树形控件,如下所示:
v -- Auto-detected
| |
| +---Qt in PATH /usr/bin/qmake-qt4
|
+--- Manual
Run Code Online (Sandbox Code Playgroud)
在对话框的底部显示"找到Qt版本4.7.2,使用mkspec linux-g ++(桌面)"
我发现我可以通过手动选择从应用程序存储库安装QmlViewer来获取"无效的Qt版本"消息.你会认为它会说更像"未找到Qml Viewer,请安装它"但是......哦.现在它说Qt版本:[Qt in PATH].
所以这是固定的,Qml应用程序运行.但"设计"按钮仍然显示为灰色.Qt Designer作为应用程序安装,其插件显示在"About Plugins ..."列表中.当我单击表单文件时,在普通(非Qt-Quick)项目中启用了设计按钮,而不是.qml文件.
如何在QtQuick应用程序中应用MVVM模式?
任何人都可以给我任何样本(简单)代码吗?
谢谢
在我的应用程序UI中,我在QML列表视图中显示了许多元素,当其中一个元素被删除时,它应该以动画方式向上滑动到它上面的元素后面.实现这一目的的代码与Qt文档中的这个示例非常相似,只是我为y坐标设置动画而不是动画scale,我需要递减z值以确保元素向后滑动而不是在它上面的元素前面:
Component {
id: delegate
Item {
ListView.onRemove:
SequentialAnimation {
// enable delayed removal
PropertyAction {
target: wrapper
property: "ListView.delayRemove"
value: true
}
// make box slide up behind rather
// than in front of the box above
PropertyAction {
target: wrapper
property: "z"
value: wrapper.z - 1
}
NumberAnimation {
target : wrapper
property : "y"
from : wrapper.y
to : wrapper.y - wrapper.height
duration : style.removeTransitionDuration …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个计时器QML应用程序,我正在使用Timer qml组件.间隔设置为1000毫秒(默认值为1)......但只有当应用程序关注它时,它似乎才能正常工作.当我把它放在后台时,似乎每次都没有触发,因此我在应用程序中遇到了一些错误.
我试图在文档中找到与此相关的任何内容,但我不能定时器代码非常简单:
Timer {
id: timer
repeat: true
onTriggered: {msRemaining -= 1000; Core.secondsToText(type);}
}
Run Code Online (Sandbox Code Playgroud)
任何人对此有任何想法以及如何解决它?
版本:Qt 5.2 QML 2.0 OS X 10.9
我有一个TableView,我已经定义了自己的itemDelegate.现在,从这个委托中我可以使用styleData.value访问列的值,但是我还需要访问同一个项目中的其他属性,但我找不到如何操作.
我需要这个,因为文本样式需要根据项目模型的其他属性进行更改.
有任何想法吗?谢谢!
在Qt/C++中有QT_DEBUG定义宏来知道它何时在调试或发布时编译.
是否有任何方法可以知道应用程序是否在QML文件中以调试或释放模式运行?
我正在尝试使用QML Scale Element来围绕用户点击的点执行视图缩放,但它并不总是按照记录的方式工作.
要重现该问题,请运行下面的最小QML示例(我在Ubuntu 14.04 x86_64上使用Qt 5.3.1)然后:
我的目标是让它始终正确缩放,将点击点保持为原点,如文档中所述.
PS有趣的是,如果您现在再次点击红色矩形的中心,它会按照承诺在该点附近放大.现在再次单击蓝色矩形的中心,您会看到相同的意外翻译行为.
PPS我正在开发一个应用程序,用户可以在包含矩形的任何地方鼠标滚动/捏住,内部的所有内容都应该在鼠标/捏合位置周围向上或向下缩放.许多应用程序都有这种行为.参见例如inkscape.
import QtQuick 2.2
import QtQuick.Controls 1.1
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Rectangle {
x: 100
y: 100
width: 300
height: 300
transform: Scale {
id: tform
}
MouseArea {
anchors.fill: parent
onClicked: {
console.log(mouse.x + " " + mouse.y)
tform.xScale += 0.5
tform.yScale += 0.5
tform.origin.x = mouse.x
tform.origin.y = mouse.y
}
} …Run Code Online (Sandbox Code Playgroud) 在我们注意到的中型Qt项目上工作时,如果屏幕上没有太多内存,那么内存消耗会非常高.我试图找到某种memleak导致我进入CREATE_QML_OBJECT宏,其中创建了qml实例对象.从加载的qml文件中删除所有自定义ui元素后,只留下我得到的四个基本元素
Rectangle {
Button {}
CheckBox {}
Slider {}
TextField {}
}
Run Code Online (Sandbox Code Playgroud)
而这个东西消耗大约~1-1.5 MB.
我已经看过QtQuick演示项目,那里有同样的事情:
图库演示.只是一堆控件,启动时100 MB.
相同的游戏演示.简单的游戏,在玩了256分钟的5分钟后就消失了.
我很惊讶一个简单的QtQuick QML应用程序可以占用大量内存.有人知道是什么导致这种分配,有没有办法管理它?
任何帮助将不胜感激.
相关链接,还没有找到答案
我正在使用MouseArea实现手势捕捉器(向左/向右滑动).它应该在Flickable内部使用垂直flickableDirection.此外,它应该以可视堆栈顺序将鼠标事件传播到其下的其他元素.问题是,将propagateComposedEvents设置为true的子mouseArea 在完成一次单击之前阻止任何父级的轻弹.首次点击后,它正常工作.这是显示此内容的简化代码.
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
id: __root
visible: true
width: 460; height: 640
Flickable {
id: mainFlickable
width: parent.width
height: parent.height
contentHeight: column.height
flickableDirection: Flickable.VerticalFlick
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
z: 1
}
Column {
id: column
width: parent.width
Repeater {
model: 5
Rectangle {
width: __root.width
height: 200
color: "yellow"
border.width: 2
MouseArea {
anchors.fill: parent
onClicked: {
console.log("clicked")
}
}
}
} //repeater
} //column
} //flickable
} …Run Code Online (Sandbox Code Playgroud) 那里有很多QML拖放示例,但它们都没有真正帮助我,因为在所有示例中,您可以将一个元素拖动到另一个元素中,它在哪里居中,而上面拖动的所有其他元素都在它上面.
有没有办法在一侧有一些元素,在另一侧有一个大的Rectangle地方可以拖入它们,将它们放在它内部的任何地方并且它们保持在它们的确切下落位置?
举例来说,如果我有一个Rectangle与width: 200; height: 200我在,这样的元素应该留在我已经放弃了它的位置,例如拖动的元素x: 25和y: 65.这应该是元素的位置.
你有什么建议吗?