我正在为台湾的共享空间开发一个带有 Qt 5.9 (+ V-Play)的跨平台应用程序。
所有用户都是繁体中文原生用户,因此我在我的应用中使用了UTF-8中文字符串。
大多数部分似乎没问题,但 QML按钮 UTF-8中文只显示空空格。
在桌面上它运行良好,但在Android 上(在模拟器和手机上)发生了问题。
而且,如果我稍后在Component.onComplete中再次设置 button.text ="中文UTF-8中文" ,则会正确显示。
我可以在Button.text字段中使用中文(UTF-8)字符串吗? 如果是的话,我该怎么做才能使它发挥作用?
更新
这仅发生在第一个选项卡(App启动时显示的选项卡)
POC评论
代码:
// imports
import VPlayApps 1.0
import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1
//import QtQuick.Controls.Material 2.1
import QtPositioning 5.2
// QML Button parts
Rectangle {
id: containerBtn
height: dp(60)
radius: 5
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
border.color: "blue"
Button {
id: btn_reload_pic
text: "截圖.reload()"
//dropShadow: true
//icon: IconType.recycle
anchors.right: parent.horizontalCenter
//width: parent.width / 4
//radius: 5
onClicked: {
var currentTime = new Date();
currentSnapshot.snapshotURL = currentSnapshot.snapshotURL + "?t=" + currentTime
}
}
AppButton {
id: btnLock
text: "芝麻開門(或關門)"
dropShadow: true
icon: IconType.question
anchors.left: parent.horizontalCenter
width: parent.width / 4
radius: 5
onClicked: lockSwitch()
}
}
// Component.onComplete
btnLock.text = '芝麻關門';
截图:
Button shows empty utf-8 chinese string
after setting button.text later in onComplete
环境:
Qt 5.9
QtCreator 4.3.0
V-Play 2.12.1-1
Ubuntu 16.04 LTS 64bit
Android 7.0 API 24,x86模拟器/ HTC 10
测试应用:Google Play上的MOLiApp(我无法在此处发布链接)
答案 0 :(得分:0)
这是一个错误仍在中进行调查。
在我的测试中,问题只发生在首次加载的页面中,因此来自V-Play forum的解决方法是使用 Loader
import VPlayApps 1.0
import QtQuick 2.5
App {
id: app
// loads the given item dynamically after app-start
Loader {
id: loader
sourceComponent: navigationComponent
asynchronous: true
anchors.fill: parent
visible: false
// after loading is finished, add the item to the main app content item
onLoaded: loader.item.parent = app.contentItem
}
// component for main navigation
Component {
id: navigationComponent
Navigation {
// Comment to use a navigation drawer instead of tabs on Android
navigationMode: navigationModeTabs
NavigationItem {
title: qsTr("First Page")
icon: IconType.square
FirstPage {}
}
NavigationItem {
title: qsTr("Second Page")
icon: IconType.circle
SecondPage {}
}
}
}
}
这不是解决方法,而是一种有效的解决方法。