65.9K
CodeProject 正在变化。 阅读更多。
Home

日历 - 使用 Qt 框架的带笔记的日历

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (4投票s)

2017 年 5 月 12 日

CPOL

2分钟阅读

viewsIcon

15785

downloadIcon

1169

一个简单的带笔记功能的日历

引言

该程序使用 Qt 框架编写 - 现代跨平台开发工具。Qt 允许您通过为每个操作系统编译程序,而无需更改源代码,即可在大多数现代操作系统上运行用它编写的软件。它包含开发应用程序软件时可能需要的所有主要类,从 GUI 元素到用于处理网络、数据库和 XML 的类。Qt 完全面向对象,易于扩展,并支持组件编程技术。

背景

在工作过程中,我需要一个显示全年日历的小部件。标准的 Qt 小部件 QCalendarWidget 旨在仅显示一个月。我尝试使用 QAbstractTableModel - 抽象模型来编写我自己的小部件,您可以创建它的子类来实现您自己的表格模型。我的小部件同时显示年度和月度日历。允许您选择一周的开始日期,添加和删除一周的注释。

使用代码

在工作过程中,我使用了 Qt 版本 5.8.0 和 Microsoft Visual Studio 2013。注意:使用 Qt 5.8.0 版本编译的程序由于使用了函数 - GetUserPreferredUILanguages,因此无法在 Windows XP 上运行。如果计算机未安装 Visual Studio 2013,要运行该程序,您需要 Microsoft Visual C++ 2013 Redistributable Package。

关注点

CalendarGadget - 显示月度日历的类,包含带有模型 MyCalendarModel 的 QTableView。

为了在模型 MyCalendarModel 中存储信息,使用了以下结构

struct Record
    {
        int day; 
        int month;
        int year;
        bool notes_present;
    };

该结构中的数据由函数 CalendarModel::updateModel() 写入。在没有 beginResetModel()endResetModel() 的情况下,无法正确更新数据。要返回模型存储的数据,请使用函数 CalendarModel::data(const QModelIndex &index, int role)。此外,使用此函数和 Qt :: ToolTipRole,将显示鼠标光标下的日期的注释列表。

为了存储 CalendarGadget 类型的对象,使用了非常方便的 QVector 类,它引用容器类,并提供按索引访问项目以及许多额外的便捷方法。

QVector <CalendarGadget*> Calendars;

for (int i = 1; i <= 12; i ++)
    {
        CalendarGadget *gad = new CalendarGadget;
        Calendars.append(gad);
        gad->setMonth(i);

        connect(year, SIGNAL(valueChanged(int)), gad, SLOT(gotoYear(int)));
        connect(firstDay, SIGNAL(currentIndexChanged(int)), gad, SLOT(firstDayChanged(int)));
    }

为了存储注释,我使用了 QSQLite,它将是 Qt 数据库驱动程序,用于 SQLite 数据库。日历注释存储在 myQtCalendar.exe 启动的文件夹中的 calendar.db 文件中。为了使框架能够找到驱动程序,我在程序的文件夹中使用了以下代码

    QString plugins_patch = QCoreApplication::applicationDirPath();
    QStringList paths = QCoreApplication::libraryPaths();
    paths.append(plugins_patch + "/plugins/");

为了执行 SQL 命令,在建立连接后,使用了 QSqlQuery 类。每个请求都使用 QSqlQuery::lastError() 分析错误。为了直接编辑注释、删除和添加,我使用了从 QDialog 继承的 addNote() 类。

历史

  • 版本 0.1
    • 初始版本
  • 版本 1.0
    • 添加笔记处理。错误修复。
© . All rights reserved.