QML按钮文本无法显示utf-8中文(仅显示空格)

时间:2017-07-16 11:50:10

标签: android qt utf-8 character-encoding qml

我正在为台湾的共享空间开发一个带有 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(我无法在此处发布链接)

1 个答案:

答案 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 {}
      }

    }
  }
}

这不是解决方法,而是一种有效的解决方法。