This commit is contained in:
wangguixi 2022-10-08 11:25:29 +08:00
commit 3b5ce8593f
8 changed files with 634 additions and 0 deletions

270
Time.qml Normal file
View File

@ -0,0 +1,270 @@
import QtQuick 2.0
import QtQml 2.12
import QtQuick.Layouts 1.12
import org.ukui.appwidget 1.0
//import QtQuick.Controls 2.0
AppWidget {
id:appwidget
appname: "time"
visible: true
width: 448
height: 162
// color: "gray"
// color: "transparent"
// border.color: "red"
// radius: 15
property string timeformat: "12";
property string dateformat: "cn"
property string hour;
property string minute;
property int hournumber;
property string week;
property string amorpm;
property bool v: false
property string themename;
Timer {
id: gettime;
interval: 100;
running: true;
repeat: true;
triggeredOnStart: true
onTriggered: {
appwidget.hour = Qt.formatTime(new Date(),"hh");
appwidget.minute = Qt.formatTime(new Date(),"mm");
if(appwidget.timeformat === "12") {
appwidget.hournumber = Number(appwidget.hour);
if(appwidget.hournumber > 12) {
if(appwidget.dateformat == "cn") {
ampm.text = "下午"
}
else if(appwidget.dateformat == "en") {
ampm.text = "PM"
}
appwidget.hournumber -= 12;
}
else {
if(appwidget.dateformat == "cn") {
ampm.text = "上午"
}
else if(appwidget.dateformat == "en") {
ampm.text = "AM"
}
}
if(appwidget.hournumber < 10) {
time1rec.width = 244
time1.width = 244
// console.log("=12 =",time1rec.width);
}else {
time1rec.width = 294
time1.width = 294
// console.log("=12 =",time1rec.width);
}
appwidget.hour = appwidget.hournumber.toString();
time1.text = appwidget.hour + ":" + appwidget.minute
// console.log("=12=",time1.text);
}
else {
time2.text = appwidget.hour + ":" + appwidget.minute
// console.log("=24=",time2.text);
}
week1.text = Qt.formatDate(new Date(),"ddd")
week2.text = Qt.formatDate(new Date(),"ddd")
if(dateformat == "cn") {
date1.text = Qt.formatDate(new Date(),"MM/dd");
date2.text = Qt.formatDate(new Date(),"MM/dd");
}
if(dateformat == "en") {
date1.text = Qt.formatDate(new Date(),"MM-dd");
date2.text = Qt.formatDate(new Date(),"MM-dd");
}
}
}
Rectangle {
id :twelverec
color: "transparent"
// radius: 15
anchors.fill: parent
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: !v
Rectangle {
id :time1rec
color: "transparent"
// border.color: "green"
anchors.verticalCenter: parent.verticalCenter
width: 244
height: 112
Text {
id: time1
anchors.fill:parent
verticalAlignment: TextInput.AlignVCenter
color: "#FAFAFA"
font.pixelSize:112
font.letterSpacing: 0
font.family: "STxihei"
}
}
Rectangle {
//
id :spacing1
width: 16
height: 112
anchors.left: time1rec.right
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
}
Rectangle {
id :daterec
color: "transparent"
// border.color: "pink"
width: 137
height: 96
anchors.verticalCenter: parent.verticalCenter
Layout.fillWidth: true
anchors.left: spacing1.right
ColumnLayout{
width: 137
height: 96
anchors.centerIn: parent
Text {
id: ampm
color: "#FAFAFA";
font.pixelSize:40;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
RowLayout {
Text {
id: week1
color: "#FAFAFA";
font.pixelSize: 28;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
Text {
id: date1
color: "#FAFAFA";
font.pixelSize: 28;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
}
}
}
}
Rectangle{
id :twentyfoursystem
color: "transparent"
// radius: 15
anchors.fill: parent
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: v
Rectangle {
id :time2rec
color: "transparent"
// border.color: "pink"
anchors.verticalCenter: parent.verticalCenter
width: 294
height: 112
Text {
id: time2
anchors.fill:parent
verticalAlignment: TextInput.AlignVCenter
color: "#FAFAFA"
font.pixelSize:112
font.letterSpacing:0
font.family: "STxihei"
}
}
Rectangle {
//
id :spacing2
width: 16
height: 112
anchors.left: time2rec.right
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
}
Rectangle {
color: "transparent"
width: 87
height: 112
Layout.fillWidth: true
anchors.verticalCenter: parent.verticalCenter
anchors.left: spacing2.right
ColumnLayout{
width: 87
height: 112
anchors.centerIn: parent
Layout.fillWidth: true
Text {
id: week2
color: "#FAFAFA";
font.pixelSize:40;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
Text {
id: date2
color: "#FAFAFA";
font.pixelSize:40;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
}
}
}
Component.onCompleted: {
gettime.start();
// appwidget.update.connect(appwidget.onupdate);
console.log("qml 接收到数据更新信号");
appwidget.creatGsetting("org.ukui.control-center.panel.plugins");
appwidget.gsettingUpdate.connect(appwidget.onGsettingUpdate);
timeformat = appwidget.getGsettingValue("org.ukui.control-center.panel.plugins","hoursystem");
dateformat = appwidget.getGsettingValue("org.ukui.control-center.panel.plugins","date");
if(timeformat == "24") {
v = true
}else {
v = false
}
console.log("当前gsetting为", timeformat, dateformat);
}
function onGsettingUpdate(key, value)
{
if(key === "hoursystem")
{
timeformat = value
if(timeformat == "24") {
v = true
}else {
v = false
}
}
if(key === "date")
{
dateformat = value
}
}
}

14
data/time/time.conf Normal file
View File

@ -0,0 +1,14 @@
[AppWidget]
name = time
providerName = clock
previewPath = /usr/share/appwidgetdemo/clock/time.png
qmlFile = /usr/share/appwidget/qml/time.qml
zoom = false
rightButton = false
repeatPlacement = false
minWidget = 448
minHeight = 162
targetCellWidth = 2
targetCellHeight = 1
updatePeriodMillis = 0
describe = this is a datetime

BIN
data/time/time.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

270
data/time/time.qml Normal file
View File

@ -0,0 +1,270 @@
import QtQuick 2.0
import QtQml 2.12
import QtQuick.Layouts 1.12
import org.ukui.appwidget 1.0
//import QtQuick.Controls 2.0
AppWidget {
id:appwidget
appname: "time"
visible: true
width: 448
height: 162
// color: "gray"
// color: "transparent"
// border.color: "red"
// radius: 15
property string timeformat: "12";
property string dateformat: "cn"
property string hour;
property string minute;
property int hournumber;
property string week;
property string amorpm;
property bool v: false
property string themename;
Timer {
id: gettime;
interval: 100;
running: true;
repeat: true;
triggeredOnStart: true
onTriggered: {
appwidget.hour = Qt.formatTime(new Date(),"hh");
appwidget.minute = Qt.formatTime(new Date(),"mm");
if(appwidget.timeformat === "12") {
appwidget.hournumber = Number(appwidget.hour);
if(appwidget.hournumber > 12) {
if(appwidget.dateformat == "cn") {
ampm.text = "下午"
}
else if(appwidget.dateformat == "en") {
ampm.text = "PM"
}
appwidget.hournumber -= 12;
}
else {
if(appwidget.dateformat == "cn") {
ampm.text = "上午"
}
else if(appwidget.dateformat == "en") {
ampm.text = "AM"
}
}
if(appwidget.hournumber < 10) {
time1rec.width = 244
time1.width = 244
// console.log("=12 =",time1rec.width);
}else {
time1rec.width = 294
time1.width = 294
// console.log("=12 =",time1rec.width);
}
appwidget.hour = appwidget.hournumber.toString();
time1.text = appwidget.hour + ":" + appwidget.minute
// console.log("=12=",time1.text);
}
else {
time2.text = appwidget.hour + ":" + appwidget.minute
// console.log("=24=",time2.text);
}
week1.text = Qt.formatDate(new Date(),"ddd")
week2.text = Qt.formatDate(new Date(),"ddd")
if(dateformat == "cn") {
date1.text = Qt.formatDate(new Date(),"MM/dd");
date2.text = Qt.formatDate(new Date(),"MM/dd");
}
if(dateformat == "en") {
date1.text = Qt.formatDate(new Date(),"MM-dd");
date2.text = Qt.formatDate(new Date(),"MM-dd");
}
}
}
Rectangle {
id :twelverec
color: "transparent"
// radius: 15
anchors.fill: parent
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: !v
Rectangle {
id :time1rec
color: "transparent"
// border.color: "green"
anchors.verticalCenter: parent.verticalCenter
width: 244
height: 112
Text {
id: time1
anchors.fill:parent
verticalAlignment: TextInput.AlignVCenter
color: "#FAFAFA"
font.pixelSize:112
font.letterSpacing: 0
font.family: "STxihei"
}
}
Rectangle {
//
id :spacing1
width: 16
height: 112
anchors.left: time1rec.right
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
}
Rectangle {
id :daterec
color: "transparent"
// border.color: "pink"
width: 137
height: 96
anchors.verticalCenter: parent.verticalCenter
Layout.fillWidth: true
anchors.left: spacing1.right
ColumnLayout{
width: 137
height: 96
anchors.centerIn: parent
Text {
id: ampm
color: "#FAFAFA";
font.pixelSize:40;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
RowLayout {
Text {
id: week1
color: "#FAFAFA";
font.pixelSize: 28;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
Text {
id: date1
color: "#FAFAFA";
font.pixelSize: 28;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
}
}
}
}
Rectangle{
id :twentyfoursystem
color: "transparent"
// radius: 15
anchors.fill: parent
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: v
Rectangle {
id :time2rec
color: "transparent"
// border.color: "pink"
anchors.verticalCenter: parent.verticalCenter
width: 294
height: 112
Text {
id: time2
anchors.fill:parent
verticalAlignment: TextInput.AlignVCenter
color: "#FAFAFA"
font.pixelSize:112
font.letterSpacing:0
font.family: "STxihei"
}
}
Rectangle {
//
id :spacing2
width: 16
height: 112
anchors.left: time2rec.right
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
}
Rectangle {
color: "transparent"
width: 87
height: 112
Layout.fillWidth: true
anchors.verticalCenter: parent.verticalCenter
anchors.left: spacing2.right
ColumnLayout{
width: 87
height: 112
anchors.centerIn: parent
Layout.fillWidth: true
Text {
id: week2
color: "#FAFAFA";
font.pixelSize:40;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
Text {
id: date2
color: "#FAFAFA";
font.pixelSize:40;
font.letterSpacing: 0
font.family: "STxihei"
verticalAlignment: TextInput.AlignVCenter
}
}
}
}
Component.onCompleted: {
gettime.start();
// appwidget.update.connect(appwidget.onupdate);
console.log("qml 接收到数据更新信号");
appwidget.creatGsetting("org.ukui.control-center.panel.plugins");
appwidget.gsettingUpdate.connect(appwidget.onGsettingUpdate);
timeformat = appwidget.getGsettingValue("org.ukui.control-center.panel.plugins","hoursystem");
dateformat = appwidget.getGsettingValue("org.ukui.control-center.panel.plugins","date");
if(timeformat == "24") {
v = true
}else {
v = false
}
console.log("当前gsetting为", timeformat, dateformat);
}
function onGsettingUpdate(key, value)
{
if(key === "hoursystem")
{
timeformat = value
if(timeformat == "24") {
v = true
}else {
v = false
}
}
if(key === "date")
{
dateformat = value
}
}
}

20
main.cpp Normal file
View File

@ -0,0 +1,20 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}

15
main.qml Normal file
View File

@ -0,0 +1,15 @@
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
color: "black"
title: qsTr("Hello World")
Time{
}
}

9
qml.qrc Normal file
View File

@ -0,0 +1,9 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>data/time/time.conf</file>
<file>data/time/time.png</file>
<file>data/time/time.qml</file>
<file>Time.qml</file>
</qresource>
</RCC>

36
ukui-system-appwidget.pro Normal file
View File

@ -0,0 +1,36 @@
QT += quick
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Refer to the documentation for the
# deprecated API to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
# Default rules for deployment.
target.path = /usr/bin
timeqml.files += data/time/time.qml
timeqml.path = /usr/share/appwidget/qml/
timecong.files += data/time/time.conf
timecong.path = /usr/share/appwidget/config/
timepreview.files += data/time/time.png
timepreview.path = /usr/share/appwidgetdemo/clock/
INSTALLS += target timeqml timepreview timecong