我目前正在评估QtQuick(Qt用户界面创建工具包),它将作为Qt 4.7的一部分发布.QML是QtQuick背后基于JavaScript的声明性语言.
它似乎是一个非常强大的概念,但我想知道是否有人在WPF或Silverlight中广泛使用其他更成熟的声明性UI语言(如XAML)可以让我们深入了解可以从中获得的实际好处.这种编程风格.通常引用各种优点:
还有,有什么缺点吗?我想到了一些潜在的关注领域:
是否还有其他考虑因素需要考虑?
Tig*_*ine 13
(更新)
与XAML的误解是它没有被编译.它确实编译为BAML二进制预标记化XAML.显然有一个IL编译版的XAML也称为CAML.OP向我指出了这篇很好的文章,解释了XAML/BAML和CAML是什么.
无论如何,为什么要使用它的问题:
XAML只是C#对象的序列化格式,它特别适合描述分层对象结构,如WPF GUI中的结构.
WPF可以帮助您做的是编写不那么无聊的C#代码,如下所示:
var grid = new Grid();
grid.Content.add(new TextBlock() {Text = "Hello"});
grid.Content.add(new TextBlock() {Text = "World"});
Run Code Online (Sandbox Code Playgroud)
并以一种更易读的方式表达它:
<Grid>
<TextBlock Text="Hello">
<TextBlock Text="World">
</Grid>
Run Code Online (Sandbox Code Playgroud)
由于WPF对象嵌套(将内容放在其他对象中)可以变得非常深,因此WPF使得它比生成的C#代码更容易阅读.
至于关注点的分离:XAML也有帮助,因为它只允许你表达对象及其关系/属性,而不是逻辑.这迫使您将逻辑与UI布局分开.MVVM模式非常适合此任务,并允许eay可测试性和可互换视图.
XAML中增加的复杂性也很容易被忽略,因为C#中的相同代码比XAML标记更容易复杂.
我不能给你任何关于QTQuick的见解.抱歉
QtQuick可以通过C++插件进行扩展,实际上Qt的人推荐的是你在QtQuick/QML中执行UI,动画,转换等,而你的所有业务逻辑都在C++/Qt中.因此,通过这种方式,您可以获得两全其美的功能,您可以像平常一样调试C++代码,同时使UI变得轻松而且非常容易.
另外一个关于QtQuick/XAML的重要思考是它们是硬件加速的,所以例如你可以毫不费力地获得相当不错的fps.所以他们完成的目标并不慢.
它节省了时间,太多时间.我在3天内用代码做了一个用户界面,在2小时内用QML做了同样的事情.
小智 7
声明性编码,即WPF或QTQuick,是为了在开发人员之间提供一种分离,可能是实现应用程序可视化方面的艺术家.关于WPF,我发现调试变得有点困难.在我们发言时,我正在编写最新的QT以查看QTQuick.(这需要很长时间,我有时间看看stackoverflow :-))所以,我还没有意见.
QML/XAML是:
但请注意XAML :(我是XAML程序员,因此我没有QML的分数)
对表现要更加小心.例如,如果您在XAML中使用了很多RoutedCommands,那么您的应用程序将无法使用!
在XAML中,某些功能无法按预期工作.不幸的是有一些技巧.(应该很清楚......应该按预期工作......不是吗?)
注意一些类似的命名空间,如BitmapEffect和Effect.有不同的功能和成本.(例如,BitmapEffect对软件渲染有一些影响,效果对硬件渲染有一定影响)
在现实世界中,艺术家不能将WPF用作Flash(至少具有良好的性能).
某些功能适用于特殊场所.例如,DataTrigger仅在Style标签中工作,而不在Resource部分中.
XAML存在一些缺点.一些例子:没有任何顺序动画......你不能在XAML中进行任何计算(你必须在C#中编写一个转换器,即使是一个简单的工作!JavaSript是QML的一个很好的替代品)......一些属性是重复的.例如x:名称和名称...从ViewModel控制视图不清楚.例如,从ViewModel关闭View(你需要一些CodeBehind)
Tooooooo很多运行时错误.如果你在不好的地方使用某些标签,它会注意到你的语法错误,但许多错误只发生在运行时.例如,如果我为ColorAnimation设置Background属性(而不是Background.Color),它将成功编译,但在运行动画时... BUMP ...运行时错误!在Expression Blend的情况下,应用程序将崩溃!
| 归档时间: |
|
| 查看次数: |
6493 次 |
| 最近记录: |