「Qt Widget中文示例指南」如何实现一个日历?(三)
Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写所有平台无差别运行更提供了几乎所有开发过程中需要用到的工具。如今Qt已被运用于超过70个行业、数千家企业支持数百万设备及应用。本文中的CalendarWidget示例展示了QCalendarWidget的用法。在上文中我们主要介绍了Window类定义的实现本节就继续介绍请继续关注我们哟~QCalendarWidget一次显示一个日历月并允许用户选择一个日期。日历由四个组件组成一个允许用户更改显示月份的导航栏、一个网格、其中每个单元格表示一个月中的一天以及两个显示星期名称和星期数字的标题。Window类实现接上文我们将复选框和组合框连接到各种私有插槽蓝色复选框中的第一个星期五和红色复选框中的May 1都连接到reformatCalendarPage()该方法在日历切换月份时也被调用。... reformatHeaders(); reformatCalendarPage(); }在createTextFormatsGroupBox()的末尾我们调用私有槽来同步QCalendarWidget与其他小部件。现在我们已经检查了四个create…GroupBox()函数现在看一下其他私有函数和槽。QComboBox *Window::createColorComboBox() { QComboBox *comboBox new QComboBox; comboBox-addItem(tr(Red), QColor(Qt::red)); comboBox-addItem(tr(Blue), QColor(Qt::blue)); comboBox-addItem(tr(Black), QColor(Qt::black)); comboBox-addItem(tr(Magenta), QColor(Qt::magenta)); return comboBox; }在createColorCombo()中我们创建了一个组合框并用标准颜色填充它。QComboBox::addItem()的第二个参数是一个存储用户数据的QVariant(在本例中是QColor对象)。此函数用于设置工作日颜色和周末颜色组合框。void Window::firstDayChanged(int index) { calendar-setFirstDayOfWeek(Qt::DayOfWeek( firstDayCombo-itemData(index).toInt())); }当用户更改组合框的值上的星期开始时firstDayChanged()将使用组合框新值的索引调用。我们使用itemData()检索与新的当前项关联的自定义数据项并将其转换为Qt::DayOfWeek。selectionModeChanged()、horizontalHeaderChanged()和verticalHeaderChanged()与firstDayChanged()非常相似因此省略它们。void Window::selectedDateChanged() { currentDateEdit-setDate(calendar-selectedDate()); }selectedDateChanged()更新Current Date编辑器以反映QCalendarWidget的当前状态。void Window::minimumDateChanged(QDate date) { calendar-setMinimumDate(date); maximumDateEdit-setDate(calendar-maximumDate()); }当用户更改最小日期时我们告诉QCalenderWidget。与此同时还更新了Maximum Date编辑器因为如果新的最小日期晚于当前的最大日期QCalendarWidget将自动调整其最大日期以避免矛盾状态。void Window::maximumDateChanged(QDate date) { calendar-setMaximumDate(date); minimumDateEdit-setDate(calendar-minimumDate()); }maximumDateChanged()的实现类似于minimumDateChanged()。void Window::weekdayFormatChanged() { QTextCharFormat format; format.setForeground(qvariant_castQColor( weekdayColorCombo-itemData(weekdayColorCombo-currentIndex()))); calendar-setWeekdayTextFormat(Qt::Monday, format); calendar-setWeekdayTextFormat(Qt::Tuesday, format); calendar-setWeekdayTextFormat(Qt::Wednesday, format); calendar-setWeekdayTextFormat(Qt::Thursday, format); calendar-setWeekdayTextFormat(Qt::Friday, format); }每个组合框项都有一个QColor对象作为与该项文本对应的用户数据从组合框中获取颜色后我们设置一周中每一天的文本格式。日历中列的文本格式为QTextCharFormat除了前景色外它还允许我们指定各种字符格式信息。在这个例子中我们只展示了可能性的一个子集。void Window::weekendFormatChanged() { QTextCharFormat format; format.setForeground(qvariant_castQColor( weekendColorCombo-itemData(weekendColorCombo-currentIndex()))); calendar-setWeekdayTextFormat(Qt::Saturday, format); calendar-setWeekdayTextFormat(Qt::Sunday, format); }weekendFormatChanged()与weekdayFormatChanged()相同不同之处是它影响的是周六和周日而不是周一到周五。void Window::reformatHeaders() { QString text headerTextFormatCombo-currentText(); QTextCharFormat format; if (text tr(Bold)) format.setFontWeight(QFont::Bold); else if (text tr(Italic)) format.setFontItalic(true); else if (text tr(Green)) format.setForeground(Qt::green); calendar-setHeaderTextFormat(format); }当用户更改标题的文本格式时将调用reformatHeaders()插槽。我们比较标题文本格式组合框的当前文本以确定应用哪种格式。(另一种选择是将QTextCharFormat值存储在组合框项旁边。)void Window::reformatCalendarPage() { QTextCharFormat mayFirstFormat; const QDate mayFirst(calendar-yearShown(), 5, 1); QTextCharFormat firstFridayFormat; QDate firstFriday(calendar-yearShown(), calendar-monthShown(), 1); while (firstFriday.dayOfWeek() ! Qt::Friday) firstFriday firstFriday.addDays(1); if (firstFridayCheckBox-isChecked()) { firstFridayFormat.setForeground(Qt::blue); } else { // Revert to regular colour for this day of the week. Qt::DayOfWeek dayOfWeek(static_castQt::DayOfWeek(firstFriday.dayOfWeek())); firstFridayFormat.setForeground(calendar-weekdayTextFormat(dayOfWeek).foreground()); } calendar-setDateTextFormat(firstFriday, firstFridayFormat); // When it is checked, May First in Red always takes precedence over First Friday in Blue. if (mayFirstCheckBox-isChecked()) { mayFirstFormat.setForeground(Qt::red); } else if (!firstFridayCheckBox-isChecked() || firstFriday ! mayFirst) { // We can now be certain we wont be resetting May First in Red when we restore // may 1sts regular colour for this day of the week. Qt::DayOfWeek dayOfWeek(static_castQt::DayOfWeek(mayFirst.dayOfWeek())); calendar-setDateTextFormat(mayFirst, calendar-weekdayTextFormat(dayOfWeek)); } calendar-setDateTextFormat(mayFirst, mayFirstFormat); }在reformatCalendarPage()中我们设置了该月的第一个星期五和当年的5月1日的文本格式实际使用的文本格式取决于选中了哪些复选框以及工作日/周末的格式。QCalendarWidget允许我们使用setDateTextFormat()设置单个日期的文本格式我们选择在日历页面更改时设置日期格式-即显示新的月份-以及工作日/周末格式更改时设置日期格式检查mayFirstCheckBox和firstDayCheckBox中的哪个被选中(如果有的话)并相应地设置文本格式。

相关新闻

如何用FigmaCN插件快速实现Figma界面完整汉化:设计师必备的终极指南

如何用FigmaCN插件快速实现Figma界面完整汉化:设计师必备的终极指南

如何用FigmaCN插件快速实现Figma界面完整汉化:设计师必备的终极指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma复杂的英文界面而苦恼吗?FigmaCN…

2026/7/24 20:21:05 阅读更多 →
AirPodsDesktop终极指南:在Windows和Linux上解锁苹果耳机完整体验的免费方案

AirPodsDesktop终极指南:在Windows和Linux上解锁苹果耳机完整体验的免费方案

AirPodsDesktop终极指南:在Windows和Linux上解锁苹果耳机完整体验的免费方案 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDes…

2026/7/24 20:21:05 阅读更多 →
VS Code使用技巧

VS Code使用技巧

文章目录1. 官网下载地址2. Windows系统版本的安装3. 必备设置禁止收集数据保存时自动删包自动修剪尾随空格多彩缩进控制你重新启动vscode窗口的模式编辑器是否使用预览模式禁止vscode自动更新4. 常用快捷键代码格式化快捷键快速查找文件夾和文件快捷鍵快速切換已經顯示在代碼編…

2026/7/24 20:21:04 阅读更多 →

最新新闻

【从0开发一个 Agent】第十一章:构建 Planner

【从0开发一个 Agent】第十一章:构建 Planner

在前面的章节中,我们赋予了 AI 工具调用、长期记忆、RAG 知识库和工程化 Prompt 等强大能力。但当你向它提出“帮我分析上周的销售数据,生成一份包含图表的周报,并发送给团队”这样的复杂指令时,它依然会陷入混乱。它可能会在还没…

2026/7/24 20:31:07 阅读更多 →
大学生HTML期末大作业——HTML+CSS+JavaScript音乐网站

大学生HTML期末大作业——HTML+CSS+JavaScript音乐网站

HTMLCSSJS【音乐网站】网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计💥 文章目录一、🏁 网站题目二、🚩 网站描述三、🎌 网站介绍四、🏴 网站效果五、🏳️ 网站代码六、&#x1f3f3…

2026/7/24 20:31:07 阅读更多 →
开源RPA工具OpenRPA终极指南:免费企业级自动化零基础入门

开源RPA工具OpenRPA终极指南:免费企业级自动化零基础入门

开源RPA工具OpenRPA终极指南:免费企业级自动化零基础入门 【免费下载链接】openrpa Free Open Source Enterprise Grade RPA 项目地址: https://gitcode.com/gh_mirrors/op/openrpa 想要实现业务流程自动化却担心高昂的软件费用?OpenRPA作为一款完…

2026/7/24 20:31:07 阅读更多 →
2026 年 GEO 优化服务商怎么选?先看技术路线和国内AI平台的适配度

2026 年 GEO 优化服务商怎么选?先看技术路线和国内AI平台的适配度

一、AI搜索普及,GEO成为企业数字营销刚需中国信通院《2026生成式搜索产业白皮书》数据显示,2026年国内GEO服务市场规模预计突破286亿元,全年增速达125%;企业级GEO服务渗透率达到48.2%,消费、制造、教育培训、B2B服务等…

2026/7/24 20:31:07 阅读更多 →
解密全光AI:5步掌握光学神经网络核心技巧

解密全光AI:5步掌握光学神经网络核心技巧

解密全光AI:5步掌握光学神经网络核心技巧 【免费下载链接】Diffractive-Deep-Neural-Networks Diffraction Deep Neural Networks(D2NN) 项目地址: https://gitcode.com/gh_mirrors/di/Diffractive-Deep-Neural-Networks 想要体验光速计算的魅力吗&#xff1…

2026/7/24 20:31:07 阅读更多 →
python数据可视化技巧的100个练习 -- 42. 销售对比的哑铃点图

python数据可视化技巧的100个练习 -- 42. 销售对比的哑铃点图

重要性★★★★☆ 难度★★★☆☆ 您是一家零售公司的数据分析师。公司希望比较两个季度之间的销售业绩。 公司已向您提供了 Q1 和 Q2 各产品类别的销售数据。 您的任务是创建一个哑铃点图,以直观地表示这两个季度之间每个类别的销售变化。 该图表应清晰显示两个季度的销…

2026/7/24 20:30:07 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻