一个有关NFC数据交换格式(NDEF)消息的QML示例。
QML留言板示例演示从NFC标签读取的NDEF消息的内容。每个新检测到的NDEF消息都会添加到软木板中,并且可以拖动到木板上的任意位置。软木板具有个人和工作空间。可以通过向左或向右滑动来更改工作区。
demo.gif
在NFC留言板示例中,我们使用以下.qml文件:
corkboards.qml
Mode.qml
main.cpp包含应用程序逻辑,以加载存储在corkboards.qml文件中的主视图。
int main(int argc, char *argv[])
{
QGuiApplication application(argc, argv);
QQuickView view;
view.setSource(QUrl("qrc:/corkboards.qml"));
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.show();
return application.exec();
}
此文件中有两个基本的QML组件:
首次实例化NearField QML类型时,Component.onCompleted处理程序将启动NFC轮询过程。onMessageRecordsChanged处理函数解析由NearField组件检测到的NFC消息,并建立传递到ListView的数据模型。此外,每次NearField管理器停止轮询过程时,onPollingChanged处理程序都会重新启动它。
NearField {
property bool requiresManualPolling: false
orderMatch: false
onMessageRecordsChanged: {
...
onPollingChanged: {
...
Component.onCompleted: {
...
}
ListView组件将ListModel作为参数(从NFC记录构建)。模型的每个项目的视图都由Mode组件定义(其实现详细信息可以在Mode.qml文件中找到)。数据模型由软木板列表组成。每个软木板可以显示多个NFC文本消息记录。
ListView {
id: listView
...
model: list
...
delegate: Mode {}
}
每个项目的软木板标题:
Text {
anchors { horizontalCenter: parent.horizontalCenter; top: parent.top; topMargin: 10}
text: name;
font { pixelSize: 30; bold: true }
从NFC消息中读取的每个文本记录都由一个便签表示,并在显示屏上具有自己的位置。最初,位置是随机设置的。便笺上的文本设置在TextField上。
Repeater {
model: notes
Item {
id: stickyPage
x: ListView.width * (0.7 * Math.random() + 0.1)
y: ListView.height * (0.7 * Math.random() + 0.1)
...
Item {
id: sticky
...
TextEdit {
id: myText
text: noteText
...
}
...
C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\nfc
https://doc.qt.io/qt-5/qtnfc-corkboard-example.html