c++ - 是否可以在 QCalendarWidget 中禁用星期六和星期日?

标签 c++ qt qtwidgets qcalendarwidget

我希望用户能够在 QCalendarWidget 中选择星期一、星期二、星期三、星期四或星期五(工作日)。但不是周六或周日。 (周末)

  • 此功能可用于 QCalendarWidget 吗?
  • 如果不是,我如何禁用日历上的日期?

最佳答案

您可以编写自定义 CalendarWidget 并根据需要重新绘制单元格。根据您的要求,您可以检查 date.dayOfWeek() 是 6 还是 7。

在此示例中,如果日期是工作日,日历小部件可以更改所选日期的颜色,如果日期是周末,则不会更改。但是,小部件日历仍然获得事件 clicked。希望对您有所帮助。

测试日历.h

class TestCalendar: public QCalendarWidget//: public QWidget//
{
    Q_OBJECT

    Q_PROPERTY(QColor color READ getColor WRITE setColor)
public:
    TestCalendar(QWidget* parent = 0);//();//
    ~TestCalendar();

    void setColor(QColor& color);
    QColor getColor();

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

private:

    QDate m_currentDate;
    QPen m_outlinePen;
    QBrush m_transparentBrush;
};

测试日历.cpp

#include <QtWidgets>

#include "TestCalendar.h"

TestCalendar::TestCalendar(QWidget *parent)
    : QCalendarWidget(parent)
{   
    m_currentDate = QDate::currentDate();
    m_outlinePen.setColor(Qt::blue);
    m_transparentBrush.setColor(Qt::transparent);
}

TestCalendar::~TestCalendar()
{
}

void TestCalendar::setColor(QColor &color)
{
    m_outlinePen.setColor(color);
}

QColor TestCalendar::getColor()
{
    return m_outlinePen.color();
}

void TestCalendar::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{   
    if (date.dayOfWeek() == 6 or date.dayOfWeek() == 7) {
        painter->save();
        painter->drawText(rect, Qt::AlignCenter,QString::number(date.day()));
        painter->restore();
    } else {
        QCalendarWidget::paintCell(painter, rect, date);
    }
}

编辑:

我添加一张图片 enter image description here

关于c++ - 是否可以在 QCalendarWidget 中禁用星期六和星期日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48000771/

相关文章:

c++ - Qt5 到 Qt4 UI 文件兼容性

c++ - WPD API - 无法从设备传输内容(包括 SSCCE)

qt - Qt中的父代是做什么用的?

c# - 我如何为 SWIG 定义类型映射,将引用参数从 C++ 转换为 C#

c++ - 为什么对 std::tuple 的 std::vector 进行排序比对 std::arrays 的 vector 排序更快?

c++ - 运行时如何在 Visual Studio C++ 中确定调试或 Release模式

QTreeView 无法扩展 - 是否有解决方法来获取更少的 ModelIndex?

c++ - 为什么这些类不完整?

c++ - qmake 不添加小部件

c++ - 如何向同一个 QMenu 添加多个 QAction?