QT桌面项目(日历程序)

news2024/11/24 19:15:15

文章目录

  • 前言
  • 一、QCalendarWidget介绍
  • 二、日历代码实现
  • 总结


前言

本篇文章继续为大家讲解QT桌面项目,那么这篇文章我们将实现一个日历程序。在QT中要想实现一个简单的日历程序是非常简单的,使用QT中自带的QCalendarWidget类即可实现。

一、QCalendarWidget介绍

QCalendarWidget 是 Qt 框架中提供的一个日期选择控件,用户可以通过该控件快速选择需要的日期,并且支持显示当前月份的日历。

QCalendarWidget 的主要功能包括:

显示日历:QCalendarWidget 可以显示当前月份的日历,同时支持快速跳转到其他月份。

选择日期:用户可以通过 QCalendarWidget 快速选择需要的日期,支持通过单击日期来选中日期。

支持多种日期格式:QCalendarWidget 支持多种日期格式显示,用户可以根据自己的需要设置日期格式。

信号通知:QCalendarWidget 支持选中某个日期时触发的信号通知,可以方便地通过信号槽机制,实现日期选择后的处理逻辑。

在使用 QCalendarWidget 时,可以通过 setMinimumDate() 和 setMaximumDate() 方法设置可选日期的范围。同时,还可以通过 setGridVisible() 方法来设置是否显示日历中每一天的网格,以便美化界面。

QCalendarWidget 是 Qt 框架中一个非常实用的日期选择控件,在需要进行日期选择的应用程序中,使用该控件可以提高用户的体验和效率。

二、日历代码实现

日历代码的实现是非常简单的这里不需要多说,有一定基础的同学都可以自己独立完成。

widget.cpp

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QDebug>
#include <QDate>
#include <QPalette>
#include <QPushButton>
#include <QTextCharFormat>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPalette palette1;
    palette1.setBrush(backgroundRole(), QBrush(QColor("#F5DEB3")));
    setPalette(palette1);

    QHBoxLayout* Hlayout = new QHBoxLayout(this);

    /*w1*/
    w1.setFixedWidth(400);
    QPixmap pixmap(":/1.jpg");
    QPixmap scaledPixmap = pixmap.scaled(w1.width(), w1.height(), Qt::KeepAspectRatio);
    QPalette palette;
    palette.setBrush(backgroundRole(), QBrush(scaledPixmap));
    w1.setPalette(palette);
    w1.setAutoFillBackground(true);

    /*w2*/
    m_calendar = new QCalendarWidget();
    m_label = new QLabel();

    QVBoxLayout* Vlayout = new QVBoxLayout(&w2);
    Vlayout->addWidget(m_label);
    Vlayout->addWidget(m_calendar);

    Hlayout->addWidget(&w1);
    Hlayout->addWidget(&w2);

    m_label->setStyleSheet("font-size: 18px;");
    m_label->setAlignment(Qt::AlignCenter);
    m_label->setText(m_calendar->selectedDate().toString("yyyy-MM-dd"));
    connect(m_calendar, SIGNAL(selectionChanged()), this, SLOT(DateChange()));

    m_calendar->setWindowFlags(Qt::FramelessWindowHint);
    m_calendar->setStyleSheet(
                "QCalendarWidget {"
                    "background-color: #F5DEB3;"
                "}"
                "QCalendarWidget QAbstractItemView {"
                    "selection-background-color: #FF8C00;"
                    "selection-color: white;"
                    "font-size: 18px;"
                    "font-family: 微软雅黑"
                "}"
                "QCalendarWidget QToolBar {"
                    "selection-background-color: #F5DEB3;"
                    "font-family: 微软雅黑"
                "}"
            );

    m_calendar->setGridVisible(true);//将网格显示出来


    setFixedSize(1024, 600);
}

void Widget::DateChange()
{
    m_label->setText(m_calendar->selectedDate().toString("yyyy-MM-dd"));
}

Widget::~Widget()
{
}


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QCalendarWidget>
#include <QLabel>


class Widget : public QWidget
{
    Q_OBJECT

    QCalendarWidget* m_calendar;
    QLabel* m_label;
    QWidget w1;
    QWidget w2;


public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected slots:
    void DateChange();
};
#endif // WIDGET_H

运行效果:
在这里插入图片描述

总结

QCalendarWidget 是 Qt 框架中提供的一个日历控件,可以方便地实现日期选择功能,但是使用 QCalendarWidget 构建日历也存在一些缺陷:

界面定制性差:QCalendarWidget 的界面是固定的,无法自由定制日历样式,如果需要更改样式,只能通过重写样式表来实现,不能灵活适应各种场景。

显示效果单一:QCalendarWidget 只能显示当前的月份日历,无法同时显示多个月份的日历,或者以其他方式展示日历信息。

功能受限:QCalendarWidget 的主要功能是日期选择,对于其他需求(如显示假期、标注特殊日子等)则需要进行扩展或者自己重写实现,增加了使用该控件的难度和复杂度。

填充效率不高:当 QCalendarWidget 中需要填充大量数据时,数据的填充效率可能会比较低,因为 QCalendarWidget 本身是使用 QWidget 来实现的,而不是使用专门的表格控件,这会影响填充效率。

综上所述,虽然 QCalendarWidget 是一个适用于日期选择的实用工具,但是使用该控件构建日历也存在一些缺陷,需要根据具体情况综合考虑使用。如果需要更灵活地定制日历界面和功能,或者涉及展示大量数据,建议使用其他表格控件来实现日历构建。

后面我们有时间自己来编写一个更加炫酷的日历。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/571610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LAMP的部署(天光渐暗,暮色里遗漏了一丝蓝,星辰便从中亮起。)

一、LAMP架构概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP&#…

阻抗板是否高可靠,华秋有话说

随着高频高速电子产品的快速发展&#xff0c;信号传输过程更容易出现反射、串扰等信号完整性问题&#xff0c;且频率越高、传输速率越快&#xff0c;信号损耗越严重&#xff0c;如何降低信号在传输过程中的损耗、保证信号完整性是高频高速PCB发展中的巨大挑战。 在高速PCB设计…

USB主机枚举设备

https://space.bilibili.com/489340606/channel/collectiondetail?sid896957 以下图片来自于沁恒微电子蔡亮工程师的讲课&#xff0c;对USB开发入门很有好处。 1. USB设备的组成结构 一个设备可以有多个配置&#xff0c;但同一时刻只能有一个生效。一个配置可以有多个接口&a…

Linux——进程概念详解

目录 一.什么是进程&#xff1f; 2.PCB的含义&#xff0c;为什么会存在PCB&#xff1f; 整体解析操作系统对进程的管理方式&#xff1a; 二.对比Windows系统&#xff1a; 三.Linux——进程 学习一个新指令&#xff1a;ps ajx 四.接下来学习几个进程的系统调用函数&#xff1…

版图设计IC617 virtuoso工具使用,创建一个库

库是用于创建自己的芯片的&#xff0c;一个库可以看成一个芯片&#xff0c;一个芯片又包含各种元器件。cell就是用于定义具体的元器件的。元器件包含版图&#xff0c;原理图&#xff0c;逻辑符号&#xff0c;等各种视图。 一 创建库过程 1.1 库的创建 1. 在Library Manager下…

PaLM 2重磅来袭,深挖谷歌92页技术报告亮点总结

谷歌CEO桑达尔・皮查伊&#xff08;Sundar Pichai&#xff09;亲切地将2023年称为是一个AI busy year&#xff0c;当地时间5月10日&#xff0c;谷歌IO大会上&#xff0c;谷歌大语言模型PaLM 2虽迟但到。作为一个“AI-first”公司&#xff0c;谷歌在Bard聊天机器人爆出事实性错误…

异常排查 | 重复Cookie访问导致HTTP请求引发空指针异常

文章目录 一、场景描述二、异常说明三、查找问题四、调试排查五、思考分析六、解决方案七、写在最后 近几日&#xff0c;遇到一个困惑了我很久的异常&#xff0c;是浏览器页面向Tomcat服务器发起HTTP请求时&#xff0c;服务器发还回来的一处异常 java.lang.NullPointerExceptio…

html实现酷炫星空可视化大屏(附源码)

文章目录 1.设计来源1.1 可视化架构1.2 可视化大屏界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/130884793 html实现酷炫星空可视化大屏(附源码) &#xff0c;html大…

华为OD机试真题(Java),跳跃游戏 II(100%通过+复盘思路)

一、题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]0i j < 返回到达 num…

Talk预告 | ICML‘23 Oral 字节跳动 AI Lab 研究员郑在翔:人工智能如何助力蛋白质设计?

本期为TechBeat人工智能社区第500期线上Talk&#xff01; 北京时间5月25日(周四)20:00&#xff0c;字节跳动 AI Lab 研究员 — 郑在翔的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “人工智能如何助力蛋白质设计 ”&#xff0c;届时将介绍基于…

springboot+vue智慧食堂系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智慧食堂系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

Rancher添加集群报错:Etcd Cluster is not healthy

原因&#xff1a; 有一台虚拟机在升级内核失败后&#xff0c;回滚至快照。但由于快照版本太老旧&#xff0c;和当前的rancher版本不匹配&#xff0c;服务器上的agent等需要清楚后&#xff0c;重新在rancher添加集群&#xff1b;但是只删除了rancher镜像以及agent相关容器&#…

Linux设备树:删除节点和属性的方法

[摘要]&#xff1a;本文主要介绍了在设备树中删除节点&#xff08;node&#xff09;和属性&#xff08;property&#xff09;的方法。为了便于理解&#xff0c;笔者先介绍了 dtsi 和 dts 的关系&#xff0c;然后构建了虚拟的需求场景&#xff0c;最终给出示例。 背景知识 设备…

易基因:MeRIP-seq等揭示m6A reader YTHDF1在结直肠癌PD-1免疫治疗中的作|Gut

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 结直肠癌&#xff08;colorectal cancer &#xff0c;CRC&#xff09;是全球最常见的癌症之一&#xff0c;转移性CRC患者的5年生存率低于20%。免疫检查点阻断&#xff08;Immune checkpo…

基于LLMs的多模态大模型(MiniGPT-4,LLaVA,mPLUG-Owl,InstuctBLIP,X-LLM)

这个系列的前一些文章有&#xff1a; 基于LLMs的多模态大模型&#xff08;Visual ChatGPT&#xff0c;PICa&#xff0c;MM-REACT&#xff0c;MAGIC&#xff09;基于LLMs的多模态大模型&#xff08;Flamingo, BLIP-2&#xff0c;KOSMOS-1&#xff0c;ScienceQA&#xff09; 前…

《汇编语言》- 读书笔记 - 第3章-寄存器(内存访问):mov、add、sub、push、pop

《汇编语言》- 读书笔记 - 第3章-寄存器&#xff08;内存访问&#xff09; 3.1 内存中字的存储问题 3.1 3.2 DS 和 [address]问题 3.2 3.3 字的传送问题 3.3问题 3.4 3.4 mov、add、sub 指令3.5 数据段问题 3.53.1~3.5 小结检测点 3.1 3.6 栈3.7 CPU 提供的栈机制问题 3.6 3.8 …

基于LSB实现文本、图片、压缩包的隐藏

关于LSB的相关介绍&#xff1a; LSB全称为 Least Significant Bit&#xff08;最低有效位&#xff09;&#xff0c;是一种基于图片最低有效位修改储存信息的隐写方法&#xff0c;在CTF杂项中经常会遇到&#xff0c;LSB属于空域算法中的一种&#xff0c;是将信息嵌入到图像点中…

OPCUA从入门到精通看这里就够了

本文将会从以下几个方面介绍 1.OPCUA是什么 2.OPCUA常用的工具有那些 3.OPCUA的官网 4.使用opcua常用的方法和功能介绍 5.根据官网自己封装了一个opcuaclient类&#xff0c;并说明每个方法的用处 6.根据4中的opcuaclient类自己写了demo 本文所有用到的资料在此下载包括U…

Android平台音视频推送选RTMP还是GB28181?

技术背景 早在2015年&#xff0c;我们发布了RTMP直播推送模块&#xff0c;那时候音视频直播这块场景需求&#xff0c;还不像现在这么普遍&#xff0c;我们做这块的初衷&#xff0c;主要是为了实现移动单兵应急指挥系统的低延迟音视频数据传输。好多开发者可能会疑惑&#xff0…

信息系统建设和服务能力评估证书CS

信息系统建设和服务能力评估体系CS简介 简介&#xff1a;本标准&#xff08;团标T/CITIF 001-2019&#xff09;是信息系统建设和服务能力评估体系系列标准的第一个&#xff0c;提出了对信息系统建设和服务提供者的综合能力要求。 发证单位&#xff1a;中国电子信息行业联合会。…