gpt4 book ai didi

c++ - QCalendarWidget - 如何突出显示日期

转载 作者:行者123 更新时间:2023-11-30 05:11:18 25 4
gpt4 key购买 nike

我有一个 QList<QDate>有事件的日期,我想在 QCalendarWidget 上突出显示这些日期,希望通过图像可以改变单元格的颜色。

我可能在我的代码中犯了一个新手错误......

我从 ( Here ) 修改的这段代码应该使 QCalendarWidget用红色边框绘制日期,但它不会...

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

m_manager = new CalendarManager(ui->calendarWidget);

setupConnections();

on_calendarWidget_clicked(QDate::currentDate());
}

/* GUI button behavior */

日历管理器.h

#ifndef CALENDARMANAGER_H
#define CALENDARMANAGER_H

#include <QCalendarWidget>

#include <QStringList>
#include <QBrush>
#include <QColor>
#include <QFile>
#include <QList>
#include <QDate>
#include <QPen>

class CalendarManager : public QCalendarWidget
{
Q_OBJECT

Q_PROPERTY(QColor color READ getColor WRITE setColor)

public:
CalendarManager(QWidget *parent = 0);
~CalendarManager();

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

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

private:
struct calendarEvent
{
QDate date;
QString name;
};

QList<calendarEvent> m_events;
QList<QDate> m_dates;

QPen m_outlinePen;
QBrush m_transparentBrush;

void getDates();
};

#endif // CALENDARMANAGER_H

日历管理器.cpp

#include <QPainter>

#include "calendarmanager.h"

CalendarManager::CalendarManager(QWidget *parent)
: QCalendarWidget(parent)
{
m_outlinePen.setColor(Qt::red);
m_transparentBrush.setColor(Qt::transparent);

getDates();
}

CalendarManager::~CalendarManager()
{

}

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

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

void CalendarManager::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
QCalendarWidget::paintCell(painter, rect, date);

if( m_dates.contains(date) ) {
painter->setPen(m_outlinePen);
painter->setBrush(m_transparentBrush);
painter->drawRect(rect.adjusted(0, 0, -1, -1));
}
}

void CalendarManager::getDates()
{
QFile file("/data/events.csv");
if(!file.open(QIODevice::ReadOnly)) {
//Error code
}

QList<QByteArray> wordList;

QDate date;
QString name;
calendarEvent e;

while(!file.atEnd()) {
QByteArray line = file.readLine();
wordList = line.split(',');

date = QDate::fromString( wordList.first(), "dd/MM/yyyy" );
name = wordList.last();

e.date = date;
e.name = name;

m_events.append(e);
m_dates.append(date);
}

file.close();
}

最佳答案

问题是,在创建 m_manager 时,即使您传递了父 ui->calendarWidget,您也没有在 GUI 中包含它。

您应该做的是提升您的 GUI 以使用该小部件,您可以从设计 View 轻松地使用它。

  1. 右键单击 calendarWidget 并选择 Promote to:

enter image description here

  1. 选择 基类 QCalendarWidget提升的类名:CalendarManager头文件: 日历管理器.h

enter image description here

  1. 按添加和提升:

enter image description here

输出截图:

enter image description here

注意:没有必要创建m_manager,如果我们看ui->calendarwidgetCalendarManager的一个实例

关于c++ - QCalendarWidget - 如何突出显示日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com