开源QSimpleUpdater是一个Qt在线升级模块 ,但是QSimpleUpdater 由于使用了很久以前的版本,并且近几年没有维护,因此其内部好多Qt的widget文件,这些QWidget与项目的整体风格不符合,说白了就是很丑,现在用QML进行改造,只需要俩个QML文件即可。
一,原型图
二,实际效果
三,关键代码
1,这里用QQuickWidget 通过setSource的方式加载QML文件
2,通过 setProperty 来设置qml中的属性。 通过findChild 并在qml中定义objectName 的方式来获取qml中的控件,比如按钮。
3,主要qml文件
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0Item {id:rootproperty int space: 10property string tipInformation: "没有可用升级"property string verInformation: ""property string okBtnText: "继续"property string cancleBtnText: "确定"property real progressValue: 0property bool okBtnEnable : falseproperty bool cancleBtnEnable : trueProgressBar{id:progressBaranchors.top: parent.topanchors.left: parent.leftanchors.right: parent.rightanchors.leftMargin: spaceanchors.rightMargin: spaceheight: 30from: 0to:100value: progressValueonValueChanged: {//console.log("valueChanged:"+progressValue)if(value>0&&value<100)okBtn.enabled=falseelseokBtn.enabled=true}}TextEdit{id:textEditanchors.left:parent.leftanchors.right: parent.rightanchors.top: progressBar.bottomanchors.leftMargin: spaceanchors.rightMargin: spacereadOnly:truetext: verInformation}Button{id:cancleBtnobjectName:"quitBtn"anchors.right: parent.rightanchors.bottom: parent.bottomanchors.bottomMargin: spaceanchors.rightMargin: spacetext: cancleBtnTextenabled: cancleBtnEnable}Button{id:okBtnobjectName:"continueBtn"anchors.bottomMargin: spaceanchors.right: cancleBtn.leftanchors.bottom: parent.bottomanchors.rightMargin: spacetext: okBtnTextenabled: okBtnEnable}Label{id:informationLabelanchors.leftMargin: spaceanchors.bottom: cancleBtn.topanchors.bottomMargin: spaceanchors.left: parent.lefttext:tipInformation}Label{id:tipLabelanchors.leftMargin: spaceanchors.bottom: informationLabel.topanchors.bottomMargin: spaceanchors.left: parent.lefttext: qsTr("提示")}}
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0Item {id:rootproperty int space: 10Label{id:tipLabelanchors.leftMargin: spaceanchors.left: parent.leftanchors.top: parent.topanchors.topMargin: space*2text: qsTr("更新还未完成,确定要退出么?")}Button{id:cancleBtnobjectName:"quitBtn"anchors.right: parent.rightanchors.bottom: parent.bottomanchors.bottomMargin: spaceanchors.rightMargin: spacetext: "取消"}Button{id:okBtnobjectName:"continueBtn"anchors.bottomMargin: spaceanchors.right: cancleBtn.leftanchors.bottom: parent.bottomanchors.rightMargin: spacetext: "确定"}
}