高级Widgets(02):【类】QCalendarWidget[官翻]

QCalendarWidget 类

QCalendarWidget类提供了一个基于月历的小部件,允许用户选择日期。

Header#include < QCalendarWidget >
qmakeQT += widgets
InheritsQWidget
Inherited By

详细说明

img

小部件是用当前月份和年份初始化的,但是QCalendarWidget提供了几个公共槽来更改显示的年份和月份。

默认情况下,选择今天的日期,用户可以同时使用鼠标和键盘选择日期。可以使用selectedDate() 函数检索当前选定的日期。通过设置minimumDate和maximumDate属性,可以将用户选择限制到给定的日期范围。或者,可以使用setDateRange() 便利槽一次性设置这两个属性。将selectionMode属性设置为NoSelection以禁止用户进行选择。请注意,还可以使用setSelectedDate() 槽以编程方式选择日期。

可以分别使用 monthShown() 和 yearShow() 函数检索当前显示的月份和年份。

新创建的日历小部件使用缩写的日期名称,星期六和星期天都用红色标记。日历网格不可见。将显示周数,第一列“天”是日历区域设置的一周的第一天。

通过将horizontalHeaderFormat属性设置为QCalendarWidget::SingleLetterDayNames,可以将天的表示法更改为单字母缩写(“M”表示“Monday”)。将相同的属性设置为QCalendarWidget::LongDayNames会使标题显示完整的日期名称。通过将verticalHeaderFormat属性设置为QCalendarWidget::NoVerticalHeader,可以删除周数。通过使用setGridVisible() 函数将gridVisible属性设置为true,可以打开日历网格:

img
QCalendarWidget *calendar;
calendar->setGridVisible(true);

最后,可以使用setFirstDayOfWeek() 函数更改第一列中的日期。

QCalendarWidget类还提供了三个信号:selectionChanged() 、activated() 和currentPageChanged() ,从而可以响应用户交互。

通过为某些特殊工作日、特殊日期或头的呈现设置QTextCharFormat,可以在很大程度上定制头的呈现、工作日或单日。
日历小部件仅使用QTextCharFormat中的一部分属性。当前,前景、背景和字体属性用于确定小部件中单个单元格的呈现。

公共类型

enum HorizontalHeaderFormat

此枚举类型定义水平标头可以显示的各种格式。

ConstantValueDescription
QCalendarWidget::NoHorizontalHeader0标题已隐藏。
QCalendarWidget::SingleLetterDayNames1标题显示一个单字母缩写的日期名称(例如,M代表星期一)。
QCalendarWidget::ShortDayNames2标题显示日期名称的缩写(例如,Mon表示星期一)。
QCalendarWidget::LongDayNames3标题显示完整的日期名称(例如星期一)。

enum SelectionMode

此枚举描述为用户提供的用于在日历中选择日期的选择类型。

ConstantValueDescription
QCalendarWidget::NoSelection0无法选择日期。
QCalendarWidget::SingleSelection1可以选择单个日期。

enum VerticalHeaderFormat

此枚举类型定义垂直标头可以显示的各种格式。

ConstantValueDescription
QCalendarWidget::ISOWeekNumbers1标题显示ISO周数,如QDate::weekNumber() 所述。
QCalendarWidget::NoVerticalHeader0标题已隐藏。

属性

  1. dateEditAcceptDelay: int 非活动日期编辑在其内容被接受之前显示的时间
    如果启用了日历小部件的日期编辑,则此属性指定在最近的用户输入之后日期编辑保持打开的时间量(以毫秒为单位)。一旦这段时间过去,日期编辑中指定的日期被接受,弹出窗口关闭。

    默认情况下,延迟定义为1500毫秒(1.5秒)。

    Access functions:

    • int dateEditAcceptDelay() const
    • void setDateEditAcceptDelay(int delay)
  2. dateEditEnabled: bool 是否启用了日期编辑弹出窗口

    如果启用了此属性,如果calendar小部件有焦点,按non-modifier键将导致弹出日期编辑,允许用户以当前区域设置指定的形式指定日期。

    默认情况下,此属性是启用的。

    日期编辑在外观上比QDateEdit更简单,但允许用户使用左右光标键在字段之间导航,使用向上和向下光标键递增和递减单个字段,并使用数字键直接输入值。

    Access functions:

    • bool isDateEditEnabled() const
    • void setDateEditEnabled(bool enable)

  3. firstDayOfWeek: Qt::DayOfWeek 在第一列中显示的日期
    默认情况下,显示在第一列中的日期是日历地区每周的第一天。

    Access functions:

    • Qt::DayOfWeek firstDayOfWeek() const
    • void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)

    enum Qt::DayOfWeek

    ConstantValue
    Qt::Monday1
    Qt::Tuesday2
    Qt::Wednesday3
    Qt::Thursday4
    Qt::Friday5
    Qt::Saturday6
    Qt::Sunday7

  4. gridVisible: bool 是否显示表格网格

    Access functions:

    • bool isGridVisible() const
    • void setGridVisible(bool show)

  5. horizontalHeaderFormat: HorizontalHeaderFormat 此属性保存水平标头的格式
    默认值为QCalendarWidget::ShortDayNames

    Access functions:

    • QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const
    • void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
  6. maximumDate: QDate 最大日期

    • QDate maximumDate() const
    • void setMaximumDate(const QDate &date)
  7. minimumDate: QDate 最小日期

    • QDate minimumDate() const
    • void setMinimumDate(const QDate &date)
  8. navigationBarVisible: bool 是否显示导航栏
    当此属性为true(默认值)时,下个月、上个月、月选择、年选择控件显示在顶部。
    当属性设置为false时,这些控件将被隐藏。

    • bool isNavigationBarVisible() const
    • void setNavigationBarVisible(bool visible)

  9. selectedDate: QDate 当前选定的日期
    所选日期必须在minimumDate和maximumDate属性指定的日期范围内。默认情况下,所选日期为当前日期。

    • QDate selectedDate() const
    • void setSelectedDate(const QDate &date)
  10. selectionMode: SelectionMode 可以在日历中进行的选择类型

    当此属性设置为SingleSelection时,用户可以使用鼠标或键盘在允许的最小和最大日期内选择一个日期。
    当属性设置为NoSelection时,用户将无法选择日期,但仍然可以通过编程方式选择日期。请注意,当属性设置为NoSelection时选择的日期仍然是日历的选定日期。默认值为SingleSelection。

    • QCalendarWidget::SelectionMode selectionMode() const
    • void setSelectionMode(QCalendarWidget::SelectionMode mode)
  11. verticalHeaderFormat: VerticalHeaderFormat 保存垂直标头的格式
    默认值为QCalendarWidget::ISOWeekNumber。

    • QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat() const
    • void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)

公共函数

构造和析构

  1. QCalendarWidget(QWidget *parent = nullptr)
  2. virtual ~QCalendarWidget()

属性相关

  1. int dateEditAcceptDelay() const
  2. void setDateEditAcceptDelay(int delay)
  3. bool isDateEditEnabled() const
  4. void setDateEditEnabled(bool enable)
  5. Qt::DayOfWeek firstDayOfWeek() const
  6. void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
  7. bool isGridVisible() const
  8. void setGridVisible(bool show)
  9. QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const
  10. void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
  11. QDate maximumDate() const
  12. void setMaximumDate(const QDate &date)
  13. QDate minimumDate() const
  14. void setMinimumDate(const QDate &date)
  15. bool isNavigationBarVisible() const
  16. void setNavigationBarVisible(bool visible)
  17. QDate selectedDate() const
  18. void setSelectedDate(const QDate &date)
  19. QCalendarWidget::SelectionMode selectionMode() const
  20. void setSelectionMode(QCalendarWidget::SelectionMode mode)
  21. QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat() const
  22. void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)

文本格式

  1. QMap<QDate, QTextCharFormat> dateTextFormat() const
  2. QTextCharFormat dateTextFormat(const QDate &date) const
  3. void setDateTextFormat(const QDate &date, const QTextCharFormat &format)
  4. QTextCharFormat headerTextFormat() const
  5. void setHeaderTextFormat(const QTextCharFormat &format)
  6. QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const
  7. void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format)

年、月

  1. int monthShown() const
  2. int yearShown() const

重新的公共函数

  1. virtual QSize minimumSizeHint() const override
  2. virtual QSize sizeHint() const override

公共槽

  1. void setCurrentPage(int year, int month)
  2. void setDateRange(const QDate &min, const QDate &max)
  3. void setGridVisible(bool show)
  4. void setNavigationBarVisible(bool visible)
  5. void setSelectedDate(const QDate &date)
  6. void showNextMonth()
  7. void showNextYear()
  8. void showPreviousMonth()
  9. void showPreviousYear()
  10. void showSelectedDate()
  11. void showToday()

信号

  1. void activated(const QDate &date)
  2. void clicked(const QDate &date)
  3. void currentPageChanged(int year, int month)
  4. void selectionChanged()

受保护的函数

  1. virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
  2. void updateCell(const QDate &date)
  3. void updateCells()

重写的受保护的函数

  1. virtual bool event(QEvent *event) override
  2. virtual bool eventFilter(QObject *watched, QEvent *event) override
  3. virtual void keyPressEvent(QKeyEvent *event) override
  4. virtual void mousePressEvent(QMouseEvent *event) override
  5. virtual void resizeEvent(QResizeEvent *event) override

相关的演示代码

#include <QtWidgets>

#define WidgetType QCalendarWidget

int i=0,j=0;
QList<WidgetType *> widgetList;
QList<QLabel *> labelList;

QCommonStyle cs;

void addFrame(QGridLayout *mainLayout,QWidget *parent){

    WidgetType *widget = new WidgetType(0);
    widgetList.append (widget);

    QLabel *label = new QLabel(parent);
    labelList.append (label);

    auto *frame = new QFrame(parent);
    frame->setFrameStyle (QFrame::Panel | QFrame::Plain);

    auto *vBox = new QVBoxLayout(frame);
    vBox->addWidget (label,Qt::AlignCenter);
    vBox->addWidget (widget,Qt::AlignCenter);
    vBox->setStretch (0,0);
    vBox->setStretch (1,1);
    mainLayout->addWidget (frame,i,j);
    j++;
}

void setLabelText(int i,QString text){
    if(i >= labelList.count ()){
        return;
    }
    QLabel *label = labelList.at (i);
    label->setText (text);
}

WidgetType* getWidget(int i){
    if(i >= widgetList.count ()){
        qDebug() <<   __LINE__ <<"行 getWidget(int i) 函数 变量"<<    i  << "超出范围";
        i = 0;          // 超出范围默认使用 0
    }
    return  widgetList.at (i);
}

int main(int argc, char *argv[])
{

    QApplication::setStyle (QStyleFactory::create ("fusion"));  //windowsvista  macintosh   fusion

    QApplication app(argc,argv);
    app.setStyleSheet ("QLabel{background:yellow;"
                       "color:black;}");
    QMetaObject mo = WidgetType::staticMetaObject;
    app.setApplicationName (mo.className ());

    QDialog w;
    w.setWindowFlag (Qt::WindowContextHelpButtonHint,false);

    auto *mainLayout = new QGridLayout(&w);

    addFrame (mainLayout,&w);
    addFrame (mainLayout,&w);

    getWidget (0)->setNavigationBarVisible (true);
    getWidget (1)->setNavigationBarVisible (false);

    setLabelText (0,"setNavigationBarVisible(true)\n" );
    setLabelText (1,"setNavigationBarVisible(false)\n" );

    w.show ();

    app.exec();
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值