热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux下qt制作日历,课内资源

1概要1.1简介本篇设计文档主要讲述了计52班的吴启凌根据小学期第一周李国良老师所教的内容,来实现的程序Calendar的设计思路,架构,

1 概要

1.1 简介

本篇设计文档主要讲述了计52班的吴启凌根据小学期第一周李国良老师所教的内容,来实现的程序Calendar的设计思路,架构,以及一些设计细节。

1.2 实现的功能

Calendar实现了日历的基本功能以及一些附加功能,主要有

正确地按照公历显示日历。

能够添加、删除、修改事件序列,某个事件在设置时,能够按天,按周,按月重复发生;删除事件时,能删除可重复事件的单个或全部。

能够设置每一天的颜色。

能够与本地文件实现拖拽交互。当用户把文件拖到某一天上时,能够保存到Calendar所在的目录下,并在当天格子内显示文件名。双击某一天能够打开一个对话框,其中显示了该天上的所有文件,并且能够拖拽到本地保存。此外,还设计了一个按钮来打开和关闭拖拽交互。

能够使用配置文件,包括XML和ini文件来保存信息。其中,XML用于保存事件和每天的颜色,ini用于保存语言,是否打开拖拽交互的信息。信息能够通过save按钮保存,也可在关闭程序时自动保存。支持导入,导出XML文件。

可以对日历进行整体拖拽,并设置了一个按钮来固定、解锁界面,锁定后,日历不再响应鼠标动作,并且能将鼠标事件传递到桌面。

国际化:支持中文、英文两种模式。

2 系统架构

2.1 文件结构

Calendar的代码根据界面分组,文件如下

Mycalendar构建了日历的样式及其交互模式,Filesdialog和Listwidget用于显示日期所储存的文件,以及提供拖拽功能,Scheduledialog用于新建及编辑事件,Schedule类用于储存事件,Schedulemanager用于管理事件,而Mainwindow则作为各组件沟通的纽带。

d09138ad5b7c497f346f9d8d38378770.png

2.2 组件分析

Schedule类用于储存事件的描述,开始、结束日期、重复模式等信息。Schedulemanager提供了对Schedule管理的接口,包括添加、编辑、删除事件,获取某天的事件列表或单个事件,以及获取全部事件。

081dcd118a0849886bb8aa9b89619c4c.png

Scheduledialog用于向用户显示事件的描述、重复模式信息,同时接受用户的编辑。

Listwidget重写了QListWidget的mousePressEvent事件处理函数,在用户对列表中的文件按下鼠标时,传递文件路径的信息。

Mycalendar则是工程中较为重要的一个类,重写了父类的dragEnterEvent和dropEvent来处理鼠标拖入事件,并在鼠标拖入文件时,将文件复制到Calendar所在目录下,并显示在日期格子中。重写了paintCell来获取每个日期的外框的位置信息,以此来判断鼠标将文件拖到了哪一天内;以及在日期中显示文件名,设置日期颜色。重写了resizeEvent来重置datepos中储存的矩形信息,以免造成拖拽的误差。

fef562807cacac157fb83e8b24bcf384.png

Mainwindow则是工程中的核心类,用于收集、处理、传递几乎所有的信息。三个public slots用于在三个事件按钮按下时,弹出窗口并收集事件信息;on_calendar_clicked用于在鼠标点击calendar时,在列表框中刷新事件信息,以及在colorbox,即颜色选择框内显示该天的颜色信息;on_actionLock_triggered在lock按钮按下时,固定窗口并设置鼠标穿透;on_checkBox_toggled用于读取是否开启文件拖拽按钮的信息;on_languageBox_currentTextChanged用于设置语言;最后三个槽用于保存配置信息、导入XML、导出XML。

bcbc6e3d73cde1eb389674e8eb81bdd2.png

3 用户界面

3.1 主界面

界面如下图1所示,左半边区域为日历部分,中间为功能按钮,右边为事件显示区域。此外工具栏中为lock按钮,菜单栏中Calendar可以弹出下拉菜单。

如图2,3,点击某天后,右侧列表框中会显示当天事件,用户可以点击New按钮来新建事件,或者可以点击列表框中的条目,再点击Edit或Delete按钮来编辑或删除事件,删除时,会出现确认对话框,三个选项分别对应删除单个事件、全部事件、取消删除。

在color标签下方的下拉框中,可以设置某天的颜色。

Language下拉框可以设置语言,设置后需要重启才能生效。需要重新设置一下翻译文件加载的路径。

Enable drag的复选框能够开启、关闭文件拖拽功能。

按lock按钮能够锁定日历,由于锁定后鼠标穿透,需要用快键键Ctrl + L来解锁。

在Calendar的下拉菜单栏中,save能够保存设置,import XML能导入事件、日期颜色设置,export XML能够导出事件、日期颜色设置。

2726a9ccf4a4da87d95ce51dcce11c62.png

d52b62a06f6c1e5a80a757f6b21a4714.png

cfa4c9b398d7ccd3f793b5d65a94cf3c.png



推荐阅读
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 第一步:PyQt4Designer设计程序界面该部分设计类同VisvalStudio内的设计,改下各部件的objectName!设计 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • python+selenium十:基于原生selenium的二次封装fromseleniumimportwebdriverfromselenium.webdriv ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
安乐乐520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有