• 11624阅读
  • 18回复

[提问]如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!!!! [复制链接]

上一主题 下一主题
离线lf0525
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-28
— 本帖被 XChinux 从 论坛公告栏 移动到本区(2011-05-28) —
哪位高手指点下啊。。。。。。万分感谢!!!!!!
离线jdwx

只看该作者 1楼 发表于: 2011-05-28
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
详细说说,万年历是QT代码,还是EXE?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线lf0525
只看该作者 2楼 发表于: 2011-05-28
回 1楼(jdwx) 的帖子
我也不太清楚,就是我下了QT4.6.3的版本,里面有一个自带的日历程序,我想在它的基础上添加一些功能,比如加上农历信息或者是某个特定日期可以添加上红色,然后到了这个日期就会弹出一个备忘提醒框。。。。。。
离线jdwx

只看该作者 3楼 发表于: 2011-05-28
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
你把那个程序发上来吧,我找不到。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线alexltr

只看该作者 4楼 发表于: 2011-05-29
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
你讲的是不是这个例子?
C:\Qt\2010.05\qt\examples\widgets\calendarwidget

它用的是QCalendarWidget。
你可能要重新实现void QCalendarWidget::paintCell ( QPainter * painter, const QRect & rect, const QDate & date ) const [virtual protected]

我也没有用过。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 5楼 发表于: 2011-05-29
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
另外还有一个关于carlendar的例子:
C:\Qt\2010.05\qt\examples\richtext\calendar、

它是在一个QTextBrowser中插入一个QTextTable
不知道你讲的是哪一个?
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线lf0525
只看该作者 6楼 发表于: 2011-05-29
回 3楼(jdwx) 的帖子
好的,我发上来啊,万分感谢啊。。。。。。。。
离线lf0525
只看该作者 7楼 发表于: 2011-05-29
回 3楼(jdwx) 的帖子
#include <QtGui>

#include "mainwindow.h"

//! [0]
MainWindow::MainWindow()
{
    selectedDate = QDate::currentDate();
    fontSize = 10;

    QWidget *centralWidget = new QWidget;
//! [0]

//! [1]
    QLabel *dateLabel = new QLabel(tr("Date:"));
    QComboBox *monthCombo = new QComboBox;

    for (int month = 1; month <= 12; ++month)
        monthCombo->addItem(QDate::longMonthName(month));

    QDateTimeEdit *yearEdit = new QDateTimeEdit;
    yearEdit->setDisplayFormat("yyyy");
    yearEdit->setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1));
    QDate(2011,6,22).setColor(Qt::red);
//! [1]

    monthCombo->setCurrentIndex(selectedDate.month() - 1);
    yearEdit->setDate(selectedDate);

//! [2]
    QLabel *fontSizeLabel = new QLabel(tr("Font size:"));
    QSpinBox *fontSizeSpinBox = new QSpinBox;
    fontSizeSpinBox->setRange(1, 64);
    fontSizeSpinBox->setValue(10);

    editor = new QTextBrowser;
    insertCalendar();
//! [2]

//! [3]
    connect(monthCombo, SIGNAL(activated(int)), this, SLOT(setMonth(int)));
    connect(yearEdit, SIGNAL(dateChanged(QDate)), this, SLOT(setYear(QDate)));
    connect(fontSizeSpinBox, SIGNAL(valueChanged(int)),
            this, SLOT(setFontSize(int)));
//! [3]

//! [4]
    QHBoxLayout *controlsLayout = new QHBoxLayout;
    controlsLayout->addWidget(dateLabel);
    controlsLayout->addWidget(monthCombo);
    controlsLayout->addWidget(yearEdit);
    controlsLayout->addSpacing(24);
    controlsLayout->addWidget(fontSizeLabel);
    controlsLayout->addWidget(fontSizeSpinBox);
    controlsLayout->addStretch(1);

    QVBoxLayout *centralLayout = new QVBoxLayout;
    centralLayout->addLayout(controlsLayout);
    centralLayout->addWidget(editor, 1);
    centralWidget->setLayout(centralLayout);

    setCentralWidget(centralWidget);
//! [4]
}

//! [5]
void MainWindow::insertCalendar()
{
    editor->clear();
    QTextCursor cursor = editor->textCursor();
    cursor.beginEditBlock();

    QDate date(selectedDate.year(), selectedDate.month(), 1);
//! [5]

//! [6]
    QTextTableFormat tableFormat;
    tableFormat.setAlignment(Qt::AlignHCenter);
    tableFormat.setBackground(QColor("#e0e0e0"));
    tableFormat.setCellPadding(2);
    tableFormat.setCellSpacing(4);
//! [6] //! [7]
    QVector<QTextLength> constraints;
    constraints << QTextLength(QTextLength::PercentageLength, 14)
                << QTextLength(QTextLength::PercentageLength, 14)
                << QTextLength(QTextLength::PercentageLength, 14)
                << QTextLength(QTextLength::PercentageLength, 14)
                << QTextLength(QTextLength::PercentageLength, 14)
                << QTextLength(QTextLength::PercentageLength, 14)
                << QTextLength(QTextLength::PercentageLength, 14);
    tableFormat.setColumnWidthConstraints(constraints);
//! [7]

//! [8]
    QTextTable *table = cursor.insertTable(1, 7, tableFormat);
//! [8]

//! [9]
    QTextFrame *frame = cursor.currentFrame();
    QTextFrameFormat frameFormat = frame->frameFormat();
    frameFormat.setBorder(1);
    frame->setFrameFormat(frameFormat);
//! [9]

//! [10]
    QTextCharFormat format = cursor.charFormat();
    format.setFontPointSize(fontSize);

    QTextCharFormat boldFormat = format;
    boldFormat.setFontWeight(QFont::Bold);

    QTextCharFormat highlightedFormat = boldFormat;
    highlightedFormat.setBackground(Qt::yellow);
//! [10]

//! [11]
    for (int weekDay = 1; weekDay <= 7; ++weekDay) {
        QTextTableCell cell = table->cellAt(0, weekDay-1);
//! [11] //! [12]
        QTextCursor cellCursor = cell.firstCursorPosition();
        cellCursor.insertText(QString("%1").arg(QDate::longDayName(weekDay)),
                              boldFormat);
    }
//! [12]

//! [13]
    table->insertRows(table->rows(), 1);
//! [13]

    while (date.month() == selectedDate.month()) {
        int weekDay = date.dayOfWeek();
        QTextTableCell cell = table->cellAt(table->rows()-1, weekDay-1);
        QTextCursor cellCursor = cell.firstCursorPosition();

        if (date == QDate::currentDate())
            cellCursor.insertText(QString("%1").arg(date.day()), highlightedFormat);
        else
            cellCursor.insertText(QString("%1").arg(date.day()), format);

        date = date.addDays(1);
        if (weekDay == 7 && date.month() == selectedDate.month())
            table->insertRows(table->rows(), 1);
    }

    cursor.endEditBlock();
//! [14]
    setWindowTitle(tr("Calendar for %1 %2"
        ).arg(QDate::longMonthName(selectedDate.month())
        ).arg(selectedDate.year()));
}
//! [14]

//! [15]
void MainWindow::setFontSize(int size)
{
    fontSize = size;
    insertCalendar();
}
//! [15]

//! [16]
void MainWindow::setMonth(int month)
{
    selectedDate = QDate(selectedDate.year(), month + 1, selectedDate.day());
    insertCalendar();
}
//! [16]

//! [17]
void MainWindow::setYear(QDate date)
{
    selectedDate = QDate(date.year(), selectedDate.month(), selectedDate.day());
    insertCalendar();
}
//! [17]
离线lf0525
只看该作者 8楼 发表于: 2011-05-29
回 5楼(alexltr) 的帖子
我说的是这个示例程序,C:\Qt\2010.05\qt\examples\richtext\calendar
就是想在它的基础上加上一些功能,有什么库函数可以实现吗?我刚刚接触QT,希望能给点详细的步骤说明。。。。。。万分感谢。。。。。。
离线alexltr

只看该作者 9楼 发表于: 2011-05-29
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
如果是这个例子的话,我觉得应该没有什么直接的库函数可以实现你的要求。其实在这个例子的函数insertCalendar中,已经有相关的代码,如设定当前日期的颜色:

  1. if (date == QDate::currentDate())
  2. cellCursor.insertText(QString("%1").arg(date.day()), highlightedFormat);
  3. else
  4. cellCursor.insertText(QString("%1").arg(date.day()), format);



你可以参考这几行代码,根据你要求的日期设定相应的QTextTableCell的格式。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线jdwx

只看该作者 10楼 发表于: 2011-05-29
Re:Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急 ..
引用第9楼alexltr于2011-05-29 13:20发表的 Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! .. :
如果是这个例子的话,我觉得应该没有什么直接的库函数可以实现你的要求。其实在这个例子的函数insertCalendar中,已经有相关的代码,如设定当前日期的颜色:
[code]if (date == QDate::currentDate())
cellCursor.insertText(QString("%1").arg(date.day()), highlightedFormat);
else
.......

楼上说的不错。
你还需要一个对话框做记事本,把信息存到磁盘上(1:文本文件,2:数据库)
还是文本文件简单点,但是不能储存复杂信息,如图片声音视频。还是先从简单点的开始吧。
在到特定日期,上面函数==,弹出对话框,显示信息。
文件格式,日期,信息。每行一条
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线lf0525
只看该作者 11楼 发表于: 2011-05-29
回 9楼(alexltr) 的帖子
好的,我试一试啊,谢谢。。。。。。
离线lf0525
只看该作者 12楼 发表于: 2011-05-29
回 9楼(alexltr) 的帖子
我刚接触C++代码和类的使用,在代码编写上可能有问题,能否给出实际的代码呢??谢谢啊。。。。。。。
离线lf0525
只看该作者 13楼 发表于: 2011-05-29
回 10楼(jdwx) 的帖子
能不能给出代码啊?听着感觉很复杂啊,太抽象了。。。。。。。
离线jdwx

只看该作者 14楼 发表于: 2011-05-29
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
这点代码不难写,都是最基本的,找本QT的书,看看相关内容,用不了几天。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线lf0525
只看该作者 15楼 发表于: 2011-05-29
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
我很急啊,网上关于QT的日历资料也很少,能不能请大侠帮帮啊。。。。。
离线lf0525
只看该作者 16楼 发表于: 2011-05-29
回 14楼(jdwx) 的帖子
大侠定要帮帮忙啊。。。。。。救急救急!!!!!
离线jdwx

只看该作者 17楼 发表于: 2011-05-29
Re:如何在一个万年历中对某个特定日期添加上颜色并且能够弹出一个提醒的对话框。。。。急急急急急急!! ..
一点也不难,不是你要做的吗!你什么都不做,别人帮你做,什么时候你自己才能学会!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线lf0525
只看该作者 18楼 发表于: 2011-05-29
回 17楼(jdwx) 的帖子
那好歹也讲得详细点啊,我急着要交啊。。。。。
快速回复
限100 字节
 
上一个 下一个