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

📄 clock.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}void Clock::resetStopWatch(){    if ( swatch_running ) {	swatch_splitms[swatch_currLap] = swatch_totalms+swatch_start.elapsed();	swatch_dispLap = swatch_currLap;	if ( swatch_currLap < 98 )  // allow up to 99 laps	    swatch_currLap++;	reset->setEnabled( swatch_currLap < 98 );	updateLap();	lapTimer->start( 2000, TRUE );    } else {	swatch_start.start();	swatch_totalms = 0;	swatch_currLap = 0;	swatch_dispLap = 0;	for ( uint i = 0; i < swatch_splitms.count(); i++ )	    swatch_splitms[(int)i] = 0;	updateLap();	updateClock();	reset->setText( tr("Lap/Split") );	reset->setEnabled( FALSE );    }    prevLapBtn->setEnabled( swatch_dispLap );    nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );}void Clock::prevLap(){    if ( swatch_dispLap > 0 ) {	swatch_dispLap--;	updateLap();	prevLapBtn->setEnabled( swatch_dispLap );	nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );    }}void Clock::nextLap(){    if ( swatch_dispLap < swatch_currLap ) {	swatch_dispLap++;	updateLap();	prevLapBtn->setEnabled( swatch_dispLap );	nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );    }}void Clock::lapTimeout(){    swatch_dispLap = swatch_currLap;    updateLap();    prevLapBtn->setEnabled( swatch_dispLap );    nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );}void Clock::updateLap(){    if ( swatch_running && swatch_currLap == swatch_dispLap ) {	swatch_splitms[swatch_currLap] = swatch_totalms;	swatch_splitms[swatch_currLap] += swatch_start.elapsed();    }    int split = swatch_splitms[swatch_dispLap];    int lap;    if ( swatch_dispLap > 0 )	lap = swatch_splitms[swatch_dispLap] - swatch_splitms[swatch_dispLap-1];    else	lap = swatch_splitms[swatch_dispLap];    lapNumLcd->display( swatch_dispLap+1 );    bool showMs = !swatch_running || swatch_dispLap!=swatch_currLap;    setSwatchLcd( lapLcd, lap, showMs );    setSwatchLcd( splitLcd, split, showMs );}void Clock::setSwatchLcd( QLCDNumber *lcd, int ms, bool showMs ){    QTime swatch_time = QTime(0,0,0).addMSecs(ms);    QString d = showMs ? QString::number(ms%1000+1000) : QString("    ");    QString lcdtext = swatch_time.toString() + "." + d.right(3).left(sw_prec);    lcd->display( lcdtext );    lcd->repaint( FALSE );}bool Clock::eventFilter( QObject *o, QEvent *e ){    if ( o == swFrame && e->type() == QEvent::Resize ) {	QResizeEvent *re = (QResizeEvent *)e;	delete swLayout;	if ( re->size().height() < 80 || re->size().height()*3 < re->size().width() )	    swLayout = new QHBoxLayout( swFrame );	else	    swLayout = new QVBoxLayout( swFrame );	swLayout->addWidget( analogStopwatch );	swLayout->addWidget( stopwatchLcd );	swLayout->activate();    }    return FALSE;}void Clock::tabChanged( QWidget * ){    if ( tabs->currentPageIndex() == 0 ) {	t->start(1000);    } else if ( tabs->currentPageIndex() == 1 ) {	if ( !swatch_running )	    t->stop();	stopStart->setAccel( Key_Return );    } else if ( tabs->currentPageIndex() == 2 ) {	t->start(1000);    }    updateClock();}void Clock::setDailyAmPm(int){    scheduleApplyDailyAlarm();}void Clock::setDailyMinute( int m ){    dailyMinute->setPrefix( m <= 9 ? "0" : "" );}void Clock::dailyEdited(){    if ( spinBoxValid(dailyMinute) && spinBoxValid(dailyHour) )	scheduleApplyDailyAlarm();    else	applyAlarmTimer->stop();}void Clock::enableDaily( bool ){    scheduleApplyDailyAlarm();}void Clock::appMessage( const QCString &msg, const QByteArray &data ){    if ( msg == "alarm(QDateTime,int)" ) {	QDataStream ds(data,IO_ReadOnly);	QDateTime when;	int t;	ds >> when >> t;	QTime theTime( when.time() );	if ( t == magic_daily ) {	    QString msg = tr("<b>Daily Alarm:</b><p>");	    QString ts;	    if ( ampm ) {	    bool pm = FALSE;		int h = theTime.hour();		if (h > 12) {		    h -= 12;		    pm = TRUE;		}		if (h == 0) h = 12;		ts.sprintf( "%02d:%02d %s", h, theTime.minute(), pm?"PM":"AM" );	    } else {		ts.sprintf( "%02d:%02d", theTime.hour(), theTime.minute() );	    }	    msg += ts;	    Sound::soundAlarm();	    alarmCount = 0;	    alarmt->start( 5000 );	    if ( !alarmDlg ) {		alarmDlg = new QDialog( this, 0, TRUE );		alarmDlg->setCaption( tr("Clock") );		QVBoxLayout *vb = new QVBoxLayout( alarmDlg, 6 );		QHBoxLayout *hb = new QHBoxLayout( vb );		QLabel *l = new QLabel( alarmDlg );		l->setPixmap( Resource::loadPixmap("alarmbell") );		hb->addWidget(l);		alarmDlgLabel = new QLabel( msg, alarmDlg );		alarmDlgLabel->setAlignment( AlignCenter );		hb->addWidget(alarmDlgLabel);		QPushButton *cmdOk = new QPushButton( tr("OK"), alarmDlg );		vb->addWidget(cmdOk);		connect( cmdOk, SIGNAL(clicked()), alarmDlg, SLOT(accept()) );	    } else {		alarmDlgLabel->setText(msg);	    }	    // Set for tomorrow, so user wakes up every day, even if they	    // don't confirm the dialog.	    applyDailyAlarm();	    if ( !alarmDlg->isVisible() ) {		QPEApplication::execDialog(alarmDlg);		alarmt->stop();	    }	} else if ( t == magic_countdown ) {	    // countdown	    Sound::soundAlarm();	}    } else if ( msg == "setDailyEnabled(int)" ) {	QDataStream ds(data,IO_ReadOnly);	int enableDaily;	ds >> enableDaily;	dailyEnabled->setChecked( enableDaily );	applyDailyAlarm();    } else if ( msg == "editDailyAlarm()" ) {	tabs->setCurrentPage(2);	QPEApplication::setKeepRunning();    } else if (msg == "showClock()") {	tabs->setCurrentPage(0);	QPEApplication::setKeepRunning();    }}void Clock::alarmTimeout(){    if ( alarmCount < 10 ) {	Sound::soundAlarm();	alarmCount++;    } else {	alarmCount = 0;	alarmt->stop();    }}QDateTime Clock::nextAlarm( int h, int m ){    QDateTime now = QDateTime::currentDateTime();    QTime at( h, m );    QDateTime when( now.date(), at );    int count = 0;    int dow = when.date().dayOfWeek();    while ( when < now || !dayBtn[dayBtnIdx(dow)]->isOn() ) {	when = when.addDays( 1 );	dow = when.date().dayOfWeek();	if ( ++count > 7 )	    return QDateTime();    }    return when;}int Clock::dayBtnIdx( int d ) const{    if ( onMonday )	return d-1;    else if ( d == 7 )	return 0;    else	return d;}void Clock::scheduleApplyDailyAlarm(){    applyAlarmTimer->start( 5000, TRUE );}void Clock::applyDailyAlarm(){    if ( !init )	return;    applyAlarmTimer->stop();    int minute = dailyMinute->value();    int hour = dailyHour->value();    if ( ampm ) {	if (hour == 12)	    hour = 0;	if (dailyAmPm->currentItem() == 1 )	    hour += 12;    }    Config config( "Clock" );    config.setGroup( "Daily Alarm" );    config.writeEntry( "Hour", hour );    config.writeEntry( "Minute", minute );    bool enableDaily = dailyEnabled->isChecked();    config.writeEntry( "Enabled", enableDaily );    QString exclDays;    int exclCount = 0;    for ( int i = 1; i <= 7; i++ ) {	if ( !dayBtn[dayBtnIdx(i)]->isOn() ) {	    if ( !exclDays.isEmpty() )		exclDays += ",";	    exclDays += QString::number( i );	    exclCount++;	}    }    config.writeEntry( "ExcludeDays", exclDays );    AlarmServer::deleteAlarm(QDateTime(), "QPE/Application/clock",	    "alarm(QDateTime,int)", magic_daily);    if ( dailyEnabled->isChecked() && exclCount < 7 ) {	QDateTime when = nextAlarm( hour, minute );	AlarmServer::addAlarm(when, "QPE/Application/clock",			    "alarm(QDateTime,int)", magic_daily);    }}bool Clock::validDaysSelected(void){    for ( int i = 1; i <= 7; i++ ) {	if ( dayBtn[dayBtnIdx(i)]->isOn() ) {	    return TRUE;	}    }    return FALSE;}void Clock::closeEvent( QCloseEvent *e ){    if (dailyEnabled->isChecked()) {	if (!validDaysSelected()) {	    QMessageBox::warning(this, tr("Select Day"),		tr("Daily alarm requires at least\none day to be selected."));	    return;	}    }    applyDailyAlarm();    ClockBase::closeEvent(e);}bool Clock::spinBoxValid( QSpinBox *sb ){    bool valid = TRUE;    QString tv = sb->text();    for ( uint i = 0; i < tv.length(); i++ ) {	if ( !tv[0].isDigit() )	    valid = FALSE;    }    bool ok = FALSE;    int v = tv.toInt( &ok );    if ( !ok )	valid = FALSE;    if ( v < sb->minValue() || v > sb->maxValue() )	valid = FALSE;    return valid;}

⌨️ 快捷键说明

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