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();
}
来源:CSDN
作者:程序猿萌新
链接:https://blog.csdn.net/wzz953200463/article/details/104008846