定制QCalendarWidget

效果图

样式表

        详细用法可在网上搜索帖子

/*星期*/
QCalendarWidget QTableView {
    alternate-background-color: #24344c;
    color: #dddddd; /*font color*/
}

/* 所有背景 */
#qt_calendar_calendarview {
    background-color: #24344c;
}

#qt_calendar_calendarview:disabled {
    background-color: #332c7dce;
}

/*可用日期*/
QCalendarWidget QAbstractItemView:enabled {
    color: #dddddd;
    selection-color: #dddddd; /* select: font color */
    /*selection-background-color: #2c7dce; */ /* select: background color */ 
}

/*不可用日期*/
QCalendarWidget QAbstractItemView:disabled {
    color: #66dddddd;
}

/*下一月按钮*/
QToolButton#qt_calendar_prevmonth{
    icon-size: 18px;
    qproperty-icon: url(:/primary/calendar_prevmonth.svg);
}

/*上一月按钮*/
QToolButton#qt_calendar_nextmonth{
    icon-size: 18px;
    qproperty-icon: url(:/primary/calendar_nextmonth.svg);
}

QToolButton#qt_calendar_prevmonth:disabled{
    icon-size: 18px;
    qproperty-icon: url(:/disabled/calendar_prevmonth.svg);
}

QToolButton#qt_calendar_nextmonth:disabled{
    icon-size: 18px;
    qproperty-icon: url(:/disabled/calendar_nextmonth.svg);
}

定制日期三角区域及选中样式

class MyCalendarWidget  : public QCalendarWidget
{
	Q_OBJECT

public:
	HCalendarWidget(QWidget *parent = nullptr);
	~HCalendarWidget();
...

protected:
	void paintCell(QPainter* painter, const QRect& rect, const QDate& date) const Q_DECL_OVERRIDE;

private:

	//日期标记
	int		m_signYear = 0;
	int		m_signMonth = 0;
	int		m_signDays = 0;
	QColor	m_signColor;

	//选中
	QColor	m_selectFgColor;
	QColor	m_selectBgColor;
};
void MyCalendarWidget::paintCell(QPainter* painter, const QRect& rect, const QDate& date) const
{
	QCalendarWidget::paintCell(painter, rect, date);

	if (date.year() == m_signYear && date.month() == m_signMonth)
	{
		if ((0x01 << (date.day()-1)) & m_signDays)
		{
			painter->save();
			painter->setRenderHint(QPainter::Antialiasing);
			QPainterPath path;
			path.moveTo(rect.right(), rect.bottom() - TRIANGLE_SIDE_LEN);
			path.lineTo(rect.right(), rect.bottom());
			path.lineTo(rect.right() - TRIANGLE_SIDE_LEN, rect.bottom());
			painter->setBrush(m_signColor);
			painter->setPen(m_signColor);
			painter->drawPath(path);
			painter->restore();

			painter->save();
			painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
			painter->restore();
		}
	}

	if (date == selectedDate())
	{
		painter->save();
		painter->setRenderHint(QPainter::Antialiasing);
		painter->setBackground(m_selectBgColor);
		painter->setPen(m_selectFgColor);
		painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
		painter->restore();
	}
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QCalendarWidget是一个Qt库中的日历控件,它可用于显示日历,并允许用户选择日期。"水平头"是指该控件的标题栏水平显示。 QCalendarWidget的标题栏水平显示,意味着它的标题会以水平方向从左到右排列。标题栏通常包括当前显示的年份和月份,以及向前和向后切换月份的按钮。 通过设置QCalendarWidget的标题格式,可以控制标题栏的显示方式。可以选择不同的格式,以满足特定的需求。例如,可以使用setHorizontalHeaderFormat方法将标题栏设置为只显示月份和年份,或者还可以显示星期几。 对于需要更详细的标题显示的应用程序,还可以使用自定义标题格式。通过继承QCalendarWidget并重写headerText方法,可以实现自定义标题显示内容。可以根据具体的需求,添加任何需要的文本或图标到标题栏中。 总而言之,QCalendarWidget的水平头是指其标题栏以水平方向从左到右排列的一部分,用于显示日期和切换月份的按钮等信息。开发人员可以根据需求,通过设置标题格式或自定义标题内容来实现不同的显示效果。 ### 回答2: QCalendarWidget的水平头是指在日历控件中,星期一到星期日的显示方式。默认情况下,QCalendarWidget的水平头是垂直显示的,即星期一、星期二等依次排列。但是,如果需要将水平头显示为水平排列,可以通过设置QCalendarWidget的首日显示日期来实现。 可以通过QCalendarWidget的setFirstDayOfWeek方法设置首日显示日期。默认情况下,首日显示日期为Qt::Monday,即以星期一作为每周的第一天。如果想要将水平头显示为水平排列,可以将首日显示日期设置为Qt::Sunday,即以星期日作为每周的第一天。 示例代码如下: ``` QCalendarWidget *calendarWidget = new QCalendarWidget(this); calendarWidget->setFirstDayOfWeek(Qt::Sunday); // 将首日显示日期设置为星期日 ``` 通过以上代码,QCalendarWidget的水平头就会变成星期日、星期一等水平排列的形式。这样,在日历控件中展示的星期就会按照水平方向排列。注意,通过设置首日显示日期来实现水平头的展示方式,并不会影响到日历控件的其他功能和显示效果。 总结:通过设置QCalendarWidget的首日显示日期,可以实现水平头的展示方式,将星期一到星期日以水平排列的形式显示在日历控件中。 ### 回答3: QCalendarWidget水平头是指QCalendarWidget控件中日历的标题栏水平显示。QCalendarWidget是一个在Qt框架中用于显示日历的控件,它允许用户选择日期,并提供了一些日期显示的功能。 水平头是QCalendarWidget控件中显示星期几的部分,通常放置在日历的顶部。它以星期日到星期六的顺序显示,每个星期对应一个短名称(比如"SUN"、"MON"等)。水平头的目的是帮助用户快速识别每一列(即每一天)对应的星期几。 如果我们想要设置QCalendarWidget的头部为水平显示,可以通过调用QCalendarWidget的setHorizontalHeaderFormat函数并将参数设置为QCalendarWidget::ShortDayNames。通过此方法,QCalendarWidget的头部将以星期的短名称水平显示。 例如,下面的代码片段演示了如何通过设置水平头来实现显示星期几: ```cpp QCalendarWidget *calendar = new QCalendarWidget(parent); calendar->setHorizontalHeaderFormat(QCalendarWidget::ShortDayNames); ``` 这样,当QCalendarWidget被显示时,星期日到星期六的短名称将以水平方式显示在日历的顶部。 总结起来,QCalendarWidget水平头是指QCalendarWidget控件中以水平方式显示的星期几的部分,通过设置setHorizontalHeaderFormat函数为QCalendarWidget::ShortDayNames可以实现水平头的显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值