⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datebookmonth.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		horizontalHeader()->setLabel( i, Calendar::nameOfDay( i ) );	}    }}//---------------------------------------------------------------------------DateBookMonth::DateBookMonth( QWidget *parent, const char *name, bool ac,                              DateBookDB *data )    : QVBox( parent, name ),      autoClose( ac ){    setFocusPolicy(StrongFocus);    year = QDate::currentDate().year();    month = QDate::currentDate().month();    day = QDate::currentDate().day();    header = new DateBookMonthHeader( this, "DateBookMonthHeader" );    table = new DateBookMonthTable( this, "DateBookMonthTable", data );    header->setDate( year, month );    table->setDate( year, month, QDate::currentDate().day() );    header->setFocusPolicy(NoFocus);    table->setFocusPolicy(NoFocus);    connect( header, SIGNAL( dateChanged( int, int ) ),	     this, SLOT( setDate( int, int ) ) );    connect( table, SIGNAL( dateClicked( int, int, int ) ),	     this, SLOT( finalDate(int, int, int) ) );    connect( qApp, SIGNAL(weekChanged(bool)), this,	     SLOT(slotWeekChange(bool)) );    table->setFocus();}DateBookMonth::~DateBookMonth(){}void DateBookMonth::setDate( int y, int m ){    /* only change the date if this is a different date,     * other wise we may mistakenly overide the day */    if ( (y != year) || (m != month) ) {	year = y;	month = m;	QDate nd( y, m, 1 );	if ( nd.daysInMonth() < day )	    day = nd.daysInMonth();	table->setDate( year, month, day );    }}void DateBookMonth::setDate( int y, int m, int d ){    header->setDate( y, m);    table->setDate( y, m, d);    year = y;    month = m;    day = d;}/* called when we wish to close or pass back the date */void DateBookMonth::finalDate(int y, int m, int d){    setDate( y, m, d );    emit dateClicked(y, m, d);    //    emit dateClicked(QDate(y, m, d).toString());    if ( autoClose && parentWidget() )	parentWidget()->close();}void DateBookMonth::setDate( QDate d){    setDate(d.year(), d.month(), d.day());}void DateBookMonth::redraw(){    table->setDate( year, month, day );    table->redraw();}QDate  DateBookMonth::selectedDate() const{    if ( !table )	return QDate::currentDate();    int y, m, d;    table->getDate( y, m, d );    return QDate( y, m, d );}void DateBookMonth::slotWeekChange( bool startOnMonday ){    table->setWeekStart( startOnMonday );}void DateBookMonth::keyPressEvent( QKeyEvent *e ){    switch(e->key()) {	case Key_Up:	    setDate(QDate(year, month, day).addDays(-7));	    break;	case Key_Down:	    setDate(QDate(year, month, day).addDays(7));	    break;	case Key_Left:	    setDate(QDate(year, month, day).addDays(-1));	    break;	case Key_Right:	    setDate(QDate(year, month, day).addDays(1));	    break;	case Key_Space:	    qWarning("space");	    emit dateClicked(year, month, day);	    if ( autoClose && parentWidget() )		parentWidget()->close();	    break;	default:	    qWarning("ignore");	    e->ignore();	    break;    }}//---------------------------------------------------------------------------class DayItemMonthPrivate{public:    DayItemMonthPrivate() {};    ~DayItemMonthPrivate() { mDayEvents.clear(); };    QValueList<EffectiveEvent> mDayEvents;};DayItemMonth::DayItemMonth( QTable *table, EditType et, const QString &t )	: QTableItem( table, et, t ){    d = new DayItemMonthPrivate();}DayItemMonth::~DayItemMonth(){    daysEvents.clear();    delete d;}void DayItemMonth::setEvents( const QValueList<EffectiveEvent> &effEv ){    d->mDayEvents = effEv;}void DayItemMonth::clearEffEvents(){    d->mDayEvents.clear();}void DayItemMonth::paint( QPainter *p, const QColorGroup &cg,                          const QRect &cr, bool selected ){    p->save();    QColorGroup g( cg );    g.setBrush( QColorGroup::Base, back );    g.setColor( QColorGroup::Text, forg );    if ( selected )	p->setPen( g.highlightedText() );    else	p->setPen( g.text() );    QValueStack<int> normalLine;    QValueStack<int> repeatLine;    QValueStack<int> travelLine;    bool normalAllDay = FALSE;    bool repeatAllDay = FALSE;    bool travelAllDay = FALSE;    QValueListIterator<EffectiveEvent> itDays = d->mDayEvents.begin();    for ( ; itDays != d->mDayEvents.end(); ++itDays ) {	int w = cr.width();	Event ev = (*itDays).event();	int f = (*itDays).start().hour(); // assume Effective event 	int t = (*itDays).end().hour(); 	 // is truncated.	if ( (*itDays).event().type() == Event::AllDay ) { 	    if (!ev.hasRepeat())		normalAllDay = TRUE;	    else		repeatAllDay = TRUE;	} else {	    int sLine, eLine;	    if (f == 0)		sLine = 0;	    else if (f < 8 )		sLine = 1;	    else if (f >= 17)		sLine = w - 4;	    else {		sLine = (f - 8) * (w - 8);		if (sLine)		    sLine /= 8;		sLine += 4;	    }	    if (t == 23)		eLine = w;	    else if (t < 8)		eLine = 4;	    else if (t >= 17)		eLine = w - 1;	    else {		eLine = (t - 8) * (w - 8);		if (eLine)		    eLine /= 8;		eLine += 4;	    }	    if (!ev.hasRepeat()) {		normalLine.push(sLine);		normalLine.push(eLine);	    } else {		repeatLine.push(sLine);		repeatLine.push(eLine);	    }	}    }    // draw the background    if (normalAllDay || repeatAllDay || travelAllDay) {	p->save();	if (normalAllDay)	    if (repeatAllDay) {		p->fillRect( 0, 0, cr.width(), cr.height() / 2,			colorNormalLight );		p->fillRect( 0, cr.height() / 2, cr.width(), cr.height() / 2,			colorRepeatLight );	    } else		p->fillRect( 0, 0, cr.width(), cr.height(),			colorNormalLight );	    else if (repeatAllDay)		p->fillRect( 0, 0, cr.width(), cr.height(),			colorRepeatLight );    } else {	p->fillRect( 0, 0, cr.width(), 		cr.height(), selected 		?  g.brush( QColorGroup::Highlight ) 		: g.brush( QColorGroup::Base ) );    }    // The lines    // now for the lines.    int h = 5;    int y = cr.height() / 2 - h;    while(normalLine.count() >= 2) {	int x2 = normalLine.pop();	int x1 = normalLine.pop();	if (x2 < x1 + 2)	    x2 = x1 + 2;	p->fillRect(x1, y, x2 - x1, h, colorNormal);    }    y += h;    while(repeatLine.count() >= 2) {	int x2 = repeatLine.pop();	int x1 = repeatLine.pop();	if (x2 < x1 + 2)	    x2 = x1 + 2;	p->fillRect(x1, y, x2 - x1, h, colorRepeat);    }    // Finally, draw the number.    QFont f = p->font();    f.setPointSize( ( f.pointSize() / 3 ) * 2 );    p->setFont( f );    QFontMetrics fm( f );    p->drawText( 1, 1 + fm.ascent(), QString::number( day() ) );    p->restore();}void DayItemMonth::setType( Calendar::Day::Type t ){    switch ( t ) {    case Calendar::Day::PrevMonth:    case Calendar::Day::NextMonth:	back = QBrush( QColor( 224, 224, 224 ) );	forg = black;	break;    case Calendar::Day::ThisMonth:	back = QBrush( white );	forg = black;	break;    }    typ = t;}DateButton::DateButton( bool longDate, QWidget *parent, const char * name )    :QPushButton( parent, name ){    longFormat = longDate;    df = DateFormat('/', DateFormat::MonthDayYear, DateFormat::MonthDayYear);    setDate( QDate::currentDate() );    connect(this,SIGNAL(pressed()),this,SLOT(pickDate()));}void DateButton::pickDate(){    static QPopupMenu *m1 = 0;    static DateBookMonth *picker = 0;    if ( !m1 ) {	m1 = new QPopupMenu( this );	picker = new DateBookMonth( m1, 0, TRUE );	m1->insertItem( picker );	connect( picker, SIGNAL( dateClicked( int, int, int ) ),		 this, SLOT( setDate( int, int, int ) ) );	connect( picker, SIGNAL( dateClicked( int, int, int ) ),		 this, SIGNAL( dateSelected( int, int, int ) ) );	connect( m1, SIGNAL( aboutToHide() ),		 this, SLOT( gotHide() ) );    }    picker->slotWeekChange( weekStartsMonday );    picker->setDate( currDate.year(), currDate.month(), currDate.day() );    m1->popup(mapToGlobal(QPoint(0,height())));    picker->setFocus();}void DateButton::gotHide(){    // we have to redo the button...    setDown( false );}//    void dateSelected( int year, int month, int day );void DateButton::setWeekStartsMonday( int b ){    weekStartsMonday = b;}void DateButton::setDate( int y, int m, int d ){    setDate( QDate( y,m,d) );}void DateButton::setDate( QDate d ){    currDate = d;    setText( longFormat ? TimeString::longDateString( d, df ) :             TimeString::shortDate( d, df ) );}void DateButton::setDateFormat( ::DateFormat f ){    df = f;    setDate( currDate );}bool DateButton::customWhatsThis() const{    return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -