Qt 在线升级功能

   开源QSimpleUpdater是一个Qt在线升级模块 ,但是QSimpleUpdater 由于使用了很久以前的版本,并且近几年没有维护,因此其内部好多Qt的widget文件,这些QWidget与项目的整体风格不符合,说白了就是很丑,现在用QML进行改造,只需要俩个QML文件即可。

一,原型图

Qt 在线升级功能_第1张图片

二,实际效果

Qt 在线升级功能_第2张图片

三,关键代码

1,这里用QQuickWidget 通过setSource的方式加载QML文件

Qt 在线升级功能_第3张图片

2,通过 setProperty 来设置qml中的属性。 通过findChild 并在qml中定义objectName 的方式来获取qml中的控件,比如按钮。

Qt 在线升级功能_第4张图片

3,主要qml文件

import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0

Item {
    id:root
    property int space: 10
    property string tipInformation: "没有可用升级"
    property string verInformation: ""
    property string okBtnText: "继续"
    property string cancleBtnText: "确定"
    property real progressValue: 0
    property bool okBtnEnable : false
    property bool cancleBtnEnable : true

    ProgressBar{
        id:progressBar
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.leftMargin: space
        anchors.rightMargin: space
        height: 30
        from: 0
        to:100
        value: progressValue
        onValueChanged: {
            //console.log("valueChanged:"+progressValue)
            if(value>0&&value<100)
                okBtn.enabled=false
            else
                okBtn.enabled=true
        }
    }

    TextEdit{
        id:textEdit
        anchors.left:parent.left
        anchors.right: parent.right
        anchors.top: progressBar.bottom
        anchors.leftMargin: space
        anchors.rightMargin: space
        readOnly:true
        text: verInformation
    }


    Button{
        id:cancleBtn
        objectName:"quitBtn"
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        anchors.bottomMargin:  space
        anchors.rightMargin: space
        text: cancleBtnText
        enabled: cancleBtnEnable
    }

    Button{
        id:okBtn
        objectName:"continueBtn"
        anchors.bottomMargin: space
        anchors.right: cancleBtn.left
        anchors.bottom: parent.bottom
        anchors.rightMargin: space
        text: okBtnText
        enabled: okBtnEnable
    }

    Label{
        id:informationLabel
        anchors.leftMargin: space
        anchors.bottom: cancleBtn.top
        anchors.bottomMargin: space
        anchors.left: parent.left
        text:tipInformation
    }


    Label{
        id:tipLabel
        anchors.leftMargin: space
        anchors.bottom: informationLabel.top
        anchors.bottomMargin: space
        anchors.left: parent.left
        text: qsTr("提示")
    }

}
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0

Item {
    id:root
    property int space: 10
    Label{
        id:tipLabel
        anchors.leftMargin: space
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.topMargin: space*2
        text: qsTr("更新还未完成,确定要退出么?")
    }

    Button{
        id:cancleBtn
        objectName:"quitBtn"
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        anchors.bottomMargin:  space
        anchors.rightMargin: space
        text: "取消"
    }

    Button{
        id:okBtn
        objectName:"continueBtn"
        anchors.bottomMargin: space
        anchors.right: cancleBtn.left
        anchors.bottom: parent.bottom
        anchors.rightMargin: space
        text: "确定"
    }
}

 

你可能感兴趣的:(Qt)