如何在Qt QML中创建列效果?
1、首先我们创建一个qt quick2项目。不会的,参考下面其他的经验吧。我们创建一个JavaScript文件,用来计算ListView列宽的。创建一个ElementModel.qml文件,用来放置ListModel中的数据项的,一个ElementItem.qml文件,用来放置delegate代理的。
2、我们先来看看ElementModel.qml文件,我们创建了7条记录,即7个ListElement,这些数据的格式,大家可以另外做,都差不多,另外这里使用的是固定的数据,我们还可以使用xml文件,或者C++文件导入的方式。
3、然后我们看main.qml文件,这里我们就只是放置了一个Rectangle和一个ListView,作为显示界面。由于ListView的model和delegate属性我们都是写在了另一个文件中,所以这里只需创建一个空的对象即可。这样更简洁。
4、我们在main.qml中,使用JavaScript文件,并导入到mian.qml文件中,如下图,计算返回column对象。
5、在JavaScript文件中,我们要注意几个问题,首先,我们这里是动态创建了一个qml对象,然后释放掉,主要是因为我们需要计算出每一列的列宽。我们注意动态qml对象里的语句,中间的空格是用来对齐格式的,所以可以自行调整。如下图。createQmlObject的格式,大家可以查看帮助文档。整个JavaScript对象接收的参数是model和listView,以便获取其中的属性。
6、然后我们看ElementItem文件,这个文件用来编写delegate代理,即listView真正显示的格式就是在这里实现的了。我们按照概述上面那个效果图,Text组件+竖线分隔的样式,用Row排列即可实现。分割线放在component对象里面实现,用Loader组件进行加载。当然了,你也可以直接用Rectangle组件放置也行的。如下图。编译运行,最终结果如下图。
7、这里我们还有几个问题需要注意的。第一,如果我们不使用JavaScript文件计算列宽,会怎么样呢?我们来看看。修改ElementItem.qml文件,如下图。然后我们看结果。如下图,虽然也有列,但是却是不对齐的,看起来很不好吧。没有列的效果了。
8、第二,我们需要注意字体的问题。ElementModel里面的字符串,我们需要在qml设计器中查看是否设置了正确的字体。如果设置错误,字体不支持。就不能显示文本了。
9、我们修改main.qml文件,测试运行看看,如下图,字体显示得很不理想。接着我们在qml设计器中修改字体,然后再运行看看,字体显示出来了。
10、第三,我们在ElementItem.qml文件中,当需要添加一个空白区域的时候,可以使用Item组件。就像你在一行文本中添加空格一样的。
11、最后,在ElementItem里面的Text文本中,我们要注意设置好字体的家族属性。如下图,即上面所说的字体问题了。最后效果如下图。