Qt 自定义日历控件

左心房为你撑大大i 提交于 2020-01-17 01:13:33

1.ui 界面

2.运行界面 

3.源代码 

 

//.h头文件

#ifndef MYCALENDAR_H
#define MYCALENDAR_H

#include <QWidget>
#include <QCalendarWidget>
#include <QTextFormat>
#include <QPushButton>

namespace Ui {
class MyCalendar;
}

//自定义日历类
class MyCalendar : public QWidget
{
    Q_OBJECT

public:
    explicit MyCalendar(QWidget *parent = 0);
    ~MyCalendar();

private:
    Ui::MyCalendar *ui;

signals:
    void signal_clickLeftYearButton();
    void signal_clickRightYearButton();
    void signal_clickLeftMonthButton();
    void signal_clickRightMonthButton();

public Q_SLOTS:
    void slot_leftYearButtonClicked();
    void slot_rightYearButtonClicked();
    void slot_leftMonthButtonClicked();
    void slot_rightMonthButtonClicked();

public:
    void createNewButton();

    //设置当前的日期
    void setCurrentData(QDate pData);

    //获取当前的日期
    QDate getCurrentData();

private:
    QCalendarWidget *p_widget;

    QPushButton * m_leftYearButton;
    QPushButton * m_rightYearButton;
    QPushButton * m_leftMonthButton;
    QPushButton * m_rightMonthButton;

    QPushButton * m_middleYearButton;
    QPushButton * m_middleMonthButton;

    QString m_strstyleSheet;

};

#endif // MYCALENDAR_H


//.cpp文件
#include "MyCalendar.h"
#include "ui_MyCalendar.h"
#include <QGraphicsDropShadowEffect>
#include <QDebug>

//日历属性
const QString g_strCalendarStyle = "QCalendarWidget QTableView\
{\
alternate-background-color:rgb(255,255,255);\
background-color:rgb(255,255,255);\
font: 18px \"微软雅黑\" #606266;\
}\
QCalendarWidget QAbstractItemView:enabled\
{\
font-size:18px;color:#606266;\
selection-background-color:rgb(255, 255, 255);\
selection-color:#2E8DED;\
}\
QCalendarWidget QAbstractItemView:disabled\
{\
color:#CFD4D9;\
}\
QToolButton#qt_calendar_monthbutton,#qt_calendar_yearbutton\
{\
min-height:18px;\
max-height:18px;\
min-width:20px;\
max-width:20px;\
color:rgb(60,60,60);\
font: 18px \"微软雅黑\" #606266;\
background-color:rgb(255,255,255);\
border:none;\
}\
QCalendarWidget QWidget#qt_calendar_navigationbar\
{\
background-color:rgb(0,255,255);\
}\
QCalendarWidget QMenu\
{\
border:none;\
width:58px;\
color:rgb(0,85,255);\
font: 18px \"黑体\";\
background-color:rgb(175,175,175);\
text-align:center;\
selection-background-color:rgb(150,150,150);\
}\
QToolButton::menu-indicator\
{\
border: 0px;\
}";


MyCalendar::MyCalendar(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyCalendar)
{
    ui->setupUi(this);
    setAutoFillBackground(false);
    setAttribute(Qt::WA_TranslucentBackground, true);

    p_widget = new QCalendarWidget(this);
    p_widget->setStyleSheet(g_strCalendarStyle);

    QTextCharFormat temp_format;
    QColor color(60, 60, 60);
    temp_format.setForeground(color);

    p_widget->setWeekdayTextFormat(Qt::Saturday, temp_format);
    p_widget->setWeekdayTextFormat(Qt::Sunday, temp_format);
    p_widget->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);
    p_widget->setHorizontalHeaderFormat(QCalendarWidget::NoHorizontalHeader);
    p_widget->setMinimumSize(230, 190);
    p_widget->setFocusPolicy(Qt::NoFocus);
    p_widget->setFirstDayOfWeek(Qt::Sunday);
    p_widget->setLocale(QLocale::Chinese);
    p_widget->setNavigationBarVisible(false);

    ui->widget->setMinimumHeight(35);

    QGridLayout* layout = new QGridLayout;
    layout->addWidget(p_widget);
    layout->setContentsMargins(3,3,6,3);
    ui->widget_3->setLayout(layout);

    createNewButton();

    connect(m_leftMonthButton, SIGNAL(clicked()), this, SLOT(slot_leftMonthButtonClicked()));
    connect(m_rightMonthButton, SIGNAL(clicked()), this, SLOT(slot_rightMonthButtonClicked()));
    connect(m_leftYearButton, SIGNAL(clicked()), this, SLOT(slot_leftYearButtonClicked()));
    connect(m_rightYearButton, SIGNAL(clicked()), this, SLOT(slot_rightYearButtonClicked()));
}

MyCalendar::~MyCalendar()
{
    delete ui;
}


void MyCalendar::createNewButton()
{
    m_middleYearButton = new QPushButton(this);
    m_middleYearButton->setFocusPolicy(Qt::NoFocus);
    m_middleYearButton->move(87, 12);
    m_middleYearButton->setFixedWidth(80);
    m_middleYearButton->setFixedHeight(30);
    m_middleYearButton->setText(QString("%1年").arg(p_widget->yearShown()));
    setObjectName("m_middleYearButton");
    m_middleYearButton->setStyleSheet("background-color:rgb(255,255,255);border:none;\
font: 20px \"微软雅黑\" #606266;");


    m_middleMonthButton = new QPushButton(this);
    m_middleMonthButton->setFocusPolicy(Qt::NoFocus);
    m_middleMonthButton->move(156, 12);
    m_middleMonthButton->setFixedWidth(40);
    m_middleMonthButton->setFixedHeight(30);
    m_middleMonthButton->setText(QString("%1月").arg(p_widget->monthShown()));
    setObjectName("m_middleMonthButton");
    m_middleMonthButton->setStyleSheet("background-color:rgb(255,255,255);border:none;\
font: 20px \"微软雅黑\" #606266;");

    m_leftMonthButton = new QPushButton(this);
    m_leftMonthButton->setFocusPolicy(Qt::NoFocus);
    m_leftMonthButton->move(57, 21);
    m_leftMonthButton->setFixedWidth(7);
    m_leftMonthButton->setFixedHeight(12);
    setObjectName("m_leftMonthButton");
    m_leftMonthButton->setStyleSheet("background-color:rgb(255,255,255);border:none;\
 border-image:url(D:/leftMonth.png);");

    m_rightMonthButton = new QPushButton(this);
    m_rightMonthButton->setFocusPolicy(Qt::NoFocus);
    m_rightMonthButton->move(220, 21);
    m_rightMonthButton->setFixedWidth(7);
    m_rightMonthButton->setFixedHeight(12);
    setObjectName("m_rightMonthButton");
    m_rightMonthButton->setStyleSheet("background-color:rgb(255,255,255);border:none;\
 border-image:url(D:/rightMonth.png);");

    m_leftYearButton = new QPushButton(this);
    m_leftYearButton->setFocusPolicy(Qt::NoFocus);
    m_leftYearButton->move(28, 21);
    m_leftYearButton->setFixedWidth(11);
    m_leftYearButton->setFixedHeight(12);
    setObjectName("m_leftYearButton");
    m_leftYearButton->setStyleSheet("background-color:rgb(255,255,255);border:none;\
border-image:url(D:/leftYear.png);");

    m_rightYearButton = new QPushButton(this);
    m_rightYearButton->setFocusPolicy(Qt::NoFocus);
    m_rightYearButton->move(246, 21);
    m_rightYearButton->setFixedWidth(11);
    m_rightYearButton->setFixedHeight(12);
    setObjectName("m_rightYearButton");
    m_rightYearButton->setStyleSheet("background-color:rgb(255,255,255);border:none;\
border-image:url(D:/rightYear.png);");
}


void MyCalendar::setCurrentData(QDate pData)
{
    m_middleYearButton->setText(QString("%1年").arg(pData.year()));
    m_middleMonthButton->setText(QString("%1月").arg(pData.month()));
    p_widget->setSelectedDate(pData);
}


QDate MyCalendar::getCurrentData()
{
    return p_widget->selectedDate();
}


void MyCalendar::slot_leftYearButtonClicked()
{
    m_middleYearButton->setText(QString("%1年").arg(p_widget->yearShown() - 1));
    p_widget->showPreviousYear();
}



void MyCalendar::slot_rightYearButtonClicked()
{
    m_middleYearButton->setText(QString("%1年").arg(p_widget->yearShown() + 1));
    p_widget->showNextYear();
}


void MyCalendar::slot_leftMonthButtonClicked()
{
    if (p_widget->monthShown() != 1)
    {
        m_middleMonthButton->setText(QString("%1月").arg(p_widget->monthShown() - 1));
    }
    else
    {
        m_middleMonthButton->setText(QString("%1月").arg(12));
    }

    p_widget->showPreviousMonth();
}



void MyCalendar::slot_rightMonthButtonClicked()
{
    if (p_widget->monthShown() != 12)
    {
        m_middleMonthButton->setText(QString("%1月").arg(p_widget->monthShown() + 1));
    }
    else
    {
        m_middleMonthButton->setText(QString("%1月").arg(1));
    }


    p_widget->showNextMonth();
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!