meego-ux-setting代码的关于3G链接的分析

        一切的罪恶都源于一个叫做ConnectionsSettings.qml的文件,在MeeGo.AppPage的大名下面,标记了本文件的邪恶属性,它的名字叫做:Connections。
MeeGo.AppPage {
    id: container
    pageTitle: qsTr("Connections")
        以上我是直接通过名字定位到文件的,事实上如果从上到下是这个样子的:main.qml文件做为启动文件,然后这个QML文件经过一系列复杂的调用什么的,最后将关于Connections的部分显示出来,可惜我懒,再个看不懂,没时间等等,放过它了。

        再来说这个ConnectionsSettings.qml。它在整个界面的右侧(左侧是父名称显示列表,比如上面的那个名字"Connections")显示几行的功能不同的区域。
        第一部分是offlineArea,功能是飞行功能的实现,包括是图标加文字以及一个触发按钮
        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);
                            }

                }
      }

The Last

        第三部分就是网络链接部分,名字是"Network connections"。它有一个按钮"Add network"。而在文字"Available networks"下面会显示当前所有的网络服务。
        当前的网络服务是怎么显示的呢?它是通过qml的Repeater实现的,repeat了好多个WifiExpandingBox.qml文件。这个文件实现了网络链接的所有细节。包括了显示网络状态,实现connect和disconnect按钮,remove connection按钮等等。
        单独的qml文件是不能实现功能的,那么他们是怎么实现的呢?上述的按钮,都会对应一个事件,你点击以后就产生一个信号,该信号会触发相应的事件。这些事件是由QT C++程序通过插件实现的。百度qt c++ qml。就是C++实现相应的功能,然后将各个功能映射成信号和槽什么的传递给qml文件。
        罗嗦了,那么上述按钮关于3G部分呢,就通过Connman-qt源码包提供。而本源码工程中的子工程Setting的文件只不过是在链接上网络以后,对于3G的网络细节CellularSetting.qml给于支持。相关按钮是“Setup”。
        这里由于工作需要给出“Connect”按钮的代码
                        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()函数(槽)。

networkItem.connectService()

        这个函数是通过本文件的跟id: container调用外部赋值的networkItem的connectService()函数,外部将networkItem定义成connman-qt插件中的networkItemModel类。

        这个类的connectService()函数直接调用了connman代码中的Service D-Bus接口的connect()方法。

你可能感兴趣的:(网络,service,百度,qt,NetWork,meego)