Files
work-secretfile-selfcheck/UmiOCR-data/qt_res/qml/TabPages/GlobalConfigsPage/FontPanel.qml

229 lines
8.9 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ===========================================
// =============== 字体修改面板 ===============
// ===========================================
import QtQuick 2.15
import QtQuick.Controls 2.15
import "../../Widgets"
ModalLayer {
id: fRoot
property var fontsList: []
// 主要UI文字字体内容可控可以用裁切的ttf
property string fontFamily: ""
// 数据显示文字字体,内容不可控,用兼容性好的系统字体
property string dataFontFamily: ""
// 不可加载的字体
property var illegalFonts: ["", "Terminal", "System", "Small Fonts", "Script", "Roman", "MS Serif", "MS Sans Serif", "Modern", "Fixedsys"]
function setFontFamily(f) {
fontFamily = f
qmlapp.globalConfigs.setValue("ui.fontFamily", f)
}
function setDataFontFamily(f) {
dataFontFamily = f
qmlapp.globalConfigs.setValue("ui.dataFontFamily", f)
}
Component.onCompleted: {
// 将此组件的引用传入全局设置
qmlapp.globalConfigs.fontPanel = this
fontFamily = qmlapp.globalConfigs.getValue("ui.fontFamily")
dataFontFamily = qmlapp.globalConfigs.getValue("ui.dataFontFamily")
}
contentItem: Item {
id: content
anchors.fill: parent
}
Loader {
id: panelLoader
asynchronous: true
sourceComponent: com
active: fRoot.visible
}
Component {
id: com
DoubleRowLayout {
parent: content
anchors.fill: parent
initSplitterX: 0.5
Component.onCompleted: {
// 获取字体列表,过滤出以中文字符开头的字体
let fList = Qt.fontFamilies()
let newList = fList.filter(function(str) {
return /^[\u4e00-\u9fa5]/.test(str);
})
// 补充剩余字体
for(let i in fList) {
if(illegalFonts.includes(fList[i]))
continue
if(!newList.includes(fList[i]))
newList.push(fList[i])
}
// 将当前选中的移到最前面
const i1 = newList.indexOf(dataFontFamily)
if (i1 > -1) {
newList.splice(i1, 1)
newList.unshift(dataFontFamily)
}
const i2 = newList.indexOf(fontFamily)
if (i2 > -1 && i2 !== i1) {
newList.splice(i2, 1)
newList.unshift(fontFamily)
}
fRoot.fontsList = newList
}
leftItem: Panel {
anchors.fill: parent
clip: true
Row {
id: leftTop
anchors.top: parent.top
anchors.right: parent.right
anchors.margins: size_.spacing
anchors.topMargin: 0
anchors.rightMargin: size_.spacing * 3
spacing: size_.spacing
height: size_.line * 2
// Text_ {
// anchors.top: parent.top
// anchors.bottom: parent.bottom
// verticalAlignment: Text.AlignVCenter
// text: qsTr("设置为:")
// }
Text_ {
anchors.top: parent.top
anchors.bottom: parent.bottom
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
width: size_.line * 3
text: qsTr("界面")
}
Text_ {
anchors.top: parent.top
anchors.bottom: parent.bottom
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
width: size_.line * 3
text: qsTr("内容")
font.family: theme.dataFontFamily
}
}
Panel {
anchors.top: leftTop.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: size_.spacing
anchors.topMargin: 0
color: theme.bgColor
TableView {
id: leftTable
anchors.fill: parent
anchors.margins: size_.spacing
clip: true
model: fRoot.fontsList
contentWidth: width // 内容宽度
rowSpacing: size_.spacing // 行间隔
flickableDirection: Flickable.VerticalFlick // 只允许垂直滚动
columnWidthProvider: ()=>leftTable.width
delegate: Rectangle {
height: size_.line * 2
implicitWidth: 100
implicitHeight: height
width: leftTable.width
color: fontMouseArea.containsMouse?theme.coverColor2:"#00000000"
Text_ {
text: modelData
anchors.fill: parent
anchors.leftMargin: size_.spacing
verticalAlignment: Text.AlignVCenter
font.family: modelData
}
MouseArea {
id: fontMouseArea
anchors.fill: parent
hoverEnabled: true
}
// 右边,内容字体
IconButton {
id: btn2
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.margins: size_.smallSpacing
color: theme.yesColor
bgColor_: theme.coverColor1
width: size_.line * 3
borderWidth: 1
borderColor: theme.specialTextColor
bgHoverColor_: theme.coverColor3
icon_: dataFontFamily===modelData?"yes":""
onClicked: setDataFontFamily(modelData)
}
// 左边,界面字体
IconButton {
id: btn1
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: btn2.left
anchors.margins: size_.smallSpacing
anchors.rightMargin: size_.spacing
color: theme.yesColor
bgColor_: theme.coverColor1
width: size_.line * 3
borderWidth: 1
borderColor: theme.specialTextColor
bgHoverColor_: theme.coverColor3
icon_: fontFamily===modelData?"yes":""
onClicked: setFontFamily(modelData)
}
}
}
}
}
rightItem: Panel {
anchors.fill: parent
Item {
anchors.fill: parent
anchors.margins: size_.spacing * 3
Column {
anchors.fill: parent
spacing: size_.line
Text_ {
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
font.family: fontFamily
text: qsTr("界面字体:\n软件中大部分UI的字体。")
}
Text_ {
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
font.family: dataFontFamily
text: qsTr("内容字体:\n识别结果内容的字体。")
}
}
}
}
}
}
}