Revision control
Copy as Markdown
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Basic
import qtexamples.localizedclockswitchlocale
pragma ComponentBehavior: Bound
Window {
id: root
width: 320
height: 320
visible: true
minimumWidth: layout.Layout.minimumWidth
minimumHeight: layout.Layout.minimumHeight
function updateClock() {
const now = new Date()
const locale = Qt.locale()
root.time = now.toLocaleTimeString(locale, Locale.ShortFormat)
root.date = now.toLocaleDateString(locale)
root.seconds = now.getSeconds()
}
Component.onCompleted: {
TranslatorManager.switchLanguage("en")
updateClock()
}
title: qsTr("Digital Clock")
property string time
property string date
property int seconds
property string selectedLanguage: "English"
Button {
id: languageButton
anchors.top: parent.top
anchors.right: parent.right
width: 120
height: 40
anchors.margins: 5
background: Rectangle {
color: "transparent"
}
RowLayout {
anchors.centerIn: parent
Image {
source: "globe.png"
Layout.preferredWidth: 32
Layout.preferredHeight: 32
}
Text {
text: root.selectedLanguage
color: "gray"
font.pixelSize: 18
verticalAlignment: Text.AlignVCenter
}
}
ListModel {
id: languageModel
ListElement { name: "English"; code: "en" }
ListElement { name: "Deutsch"; code: "de" }
ListElement { name: "العربية"; code: "ar" }
ListElement { name: "한국어"; code: "ko" }
ListElement { name: "中文"; code: "zh" }
ListElement { name: "日本語"; code: "ja" }
ListElement { name: "Français"; code: "fr" }
ListElement { name: "Italiano"; code: "it" }
ListElement { name: "Español"; code: "es" }
ListElement { name: "Português"; code: "pt" }
}
Menu {
id: languageMenu
width: languageButton.width
Repeater {
model: languageModel
delegate: MenuItem {
required property string name
required property string code
text: name
onTriggered: {
TranslatorManager.switchLanguage(code)
root.selectedLanguage = name
root.updateClock()
}
}
}
}
onClicked: languageMenu.open()
}
ColumnLayout {
anchors.fill: parent
id: layout
Text {
text: root.time
fontSizeMode: Text.Fit
font.pixelSize: 60
minimumPixelSize: 10
horizontalAlignment: Text.AlignHCenter
Layout.alignment: Qt.AlignHCenter
}
Text {
text: qsTr("%n second(s)", "seconds", root.seconds)
font.pixelSize: 20
Layout.alignment: Qt.AlignHCenter
}
Text {
text: root.date
font.pixelSize: 20
Layout.alignment: Qt.AlignHCenter
}
}
Timer {
interval: 1000
running: true
repeat: true
triggeredOnStart: true
onTriggered: root.updateClock()
}
}