MeeGo.AppPage { id: container pageTitle: qsTr("Connections")以上我是直接通过名字定位到文件的,事实上如果从上到下是这个样子的:main.qml文件做为启动文件,然后这个QML文件经过一系列复杂的调用什么的,最后将关于Connections的部分显示出来,可惜我懒,再个看不懂,没时间等等,放过它了。
Item { id: offlineArea height: theme_listBackgroundPixelHeightOne width: parent.width MeeGo.ThemeImage ...... Text{ text: qsTr("Airplane mode") ...... } MeeGo.ToggleButton ...... }
第二部分是当前网络服务的种类显示,包括wifi、3G都是显示在这个范围之内的,通过Gird显示了一排排的网络服务。它的组成呢,是一个网络服务名,一个meego的触发按钮,按钮上绑定了networkListModel.enableTechnology(modelData);这个是connman-qt插件的一个函数。就是说,打开这个按钮,代表着使能相应的网络服务技术,会扫描对应存在的服务。
Grid { id: technologiesGrid width: parent.width height: offlineArea.height * networkListModel.availableTechnologies.count / 2 columns: 2 Repeater { model: networkListModel.availableTechnologies ...... MeeGo.ToggleButton { id: dtoggle anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: 20 on: networkListModel.enabledTechnologies.indexOf(modelData) != -1 onToggled: { if(dtoggle.on) { networkListModel.enableTechnology(modelData); } else networkListModel.disableTechnology(modelData); } } }
text: qsTr("Connect") onClicked: { if(container.networkItem.type == "wifi") { container.networkItem.passphrase = passwordTextInput.text; container.listModel.connectService(container.ssid, container.security, passwordTextInput.text) } else { container.networkItem.connectService(); }
可以看到,3G调用了的是networkitem的connectService()函数(槽)。
这个函数是通过本文件的跟id: container调用外部赋值的networkItem的connectService()函数,外部将networkItem定义成connman-qt插件中的networkItemModel类。
这个类的connectService()函数直接调用了connman代码中的Service D-Bus接口的connect()方法。