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

📄 mainwindow.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    settings->photo_size->setCurrentItem(psize);    settings->video_size->setCurrentItem(vsize);    settings->photo_quality->setValue(pquality);    settings->video_quality->setValue(vquality);    settings->video_framerate->setValue(vframerate);    settings->video_quality_n->setFixedWidth(fontMetrics().width("100"));    settings->photo_quality_n->setFixedWidth(fontMetrics().width("100"));    if ( QPEApplication::execDialog(settings) ) {	confirmSettings();    } else {	settings->location->setLocation(storagepath);    }}void CameraMainWindow::confirmSettings(){    storagepath = settings->location->documentPath();    psize = settings->photo_size->currentItem();    vsize = settings->video_size->currentItem();    pquality = settings->photo_quality->value();    vquality = settings->video_quality->value();    vframerate = settings->video_framerate->value();    // save settings    Config cfg("Camera");    cfg.setGroup("General");    cfg.writeEntry("location",storagepath);    cfg.setGroup("Photo");    cfg.writeEntry("width",photo_size[psize].width());    cfg.writeEntry("quality",pquality);    cfg.setGroup("Video");    cfg.writeEntry("width",video_size[vsize].width());    cfg.writeEntry("quality",vquality);    cfg.writeEntry("framerate",vframerate);    loadThumbs();    preview();}static int cmpDocLnk(const void *a, const void *b){    const DocLnk *la = *(const DocLnk**)a;    const DocLnk *lb = *(const DocLnk**)b;    QFileInfo fa(la->linkFileKnown() ? la->linkFile() : la->file());    QFileInfo fb(lb->linkFileKnown() ? lb->linkFile() : lb->file());    return fa.lastModified().secsTo(fb.lastModified());}void CameraMainWindow::loadThumbs(){    if ( storagepath.isEmpty() ) {	updateActions();	return;    }    DocLnkSet set( storagepath, "image/jpeg" );    const QList<DocLnk> & l = set.children();    DocLnk* lnk;    DocLnk** array = new DocLnk*[l.count()];    int n=0;    for (QListIterator<DocLnk> it(l); (lnk=it.current()); ++it) {	if (lnk->categories().contains(camcat))	    array[n++] = lnk;    }    qsort(array,n,sizeof(array[0]),cmpDocLnk);    for (int i=0; i<nthumb; i++) {	QPixmap pm;	if ( i<n ) {	    picturefile[i] = *array[i];	    QImage img = Image::loadScaled(picturefile[i].file(),thumbw,thumbh);	    pm.convertFromImage(img);	}	if ( pm.isNull() ) {	    thumb[i]->setText("");	} else {	    thumb[i]->setPixmap(pm);	}	thumb[i]->setEnabled(!pm.isNull());    }    if ( cur_thumb >= 0 )	selectThumb(cur_thumb);    if ( !camera->videocaptureview->available() ) {	camera->photo->setEnabled(FALSE);	camera->video->setEnabled(FALSE);        if (!n) {	    thumb[0]->setEnabled(FALSE);        } else {	    thumb[0]->setFocus();            thumb[0]->setEnabled(TRUE);        }    }    updateActions();}void CameraMainWindow::delThumb(int th){    switch(QMessageBox::warning(0, tr("Confirmation"),             tr("<qt>Delete '%1'?</qt>", "%1 = file name").arg(picturefile[th].name()),             QMessageBox::Yes,            QMessageBox::No))     {        case QMessageBox::Yes:            picturefile[th].removeFiles();	    // Rhys Hack - if we have just deleted the last image and there	    // is no camera connected, then exit the application.  This	    // avoids a focus problem where it is impossible to exit with	    // the back button due to the focus being in a stupid place.	    loadThumbs();	    if ( !camera->videocaptureview->available() &&	         !(thumb[0]->isEnabled()) ) {		close();	    }            break;        default:            //nothing            break;    }}void CameraMainWindow::pushThumb(const DocLnk& f, const QImage& img){    for (int i=nthumb; --i; ) {	bool en = thumb[i-1]->isEnabled();	thumb[i]->setEnabled(en);	picturefile[i] = picturefile[i-1];	const QPixmap *pm = thumb[i-1]->pixmap();	if ( en && pm ) {	    thumb[i]->setPixmap(*pm);	} else {	    thumb[i]->setText("");	}    }    QPixmap pm;    QSize sz = Image::aspectScaleSize(img.width(),img.height(),thumbw,thumbh);    QImage simg = img.smoothScale(sz.width(),sz.height());    pm.convertFromImage(simg);    thumb[0]->setPixmap(pm);    thumb[0]->setEnabled(TRUE);    picturefile[0]=f;}void CameraMainWindow::takePhoto(){    if (camera->photo != focusWidget())    {        camera->photo->setFocus();        return;    }    QSize size = photo_size[psize];    if ( size == camera->videocaptureview->captureSize() ||	camera->videocaptureview->refocusDelay() == 0 )    {	// We can grab the current image immediately.	takePhotoNow();    } else {	// Change the camera size and then wait for the camera to refocus.	camera->videocaptureview->setCaptureSize( size );	refocusTimer->start( camera->videocaptureview->refocusDelay(), TRUE );    }}void CameraMainWindow::takePhotoNow(){    QImage img = camera->videocaptureview->image();    if ( inSnapMode() ) {	QCopEnvelope e(snap_ch,"valueSupplied(QString,QImage)");	QSize s = Image::aspectScaleSize(img.width(),img.height(),snap_maxw,snap_maxh);	e << snap_id << img.smoothScale(s.width(),s.height());	setSnapMode(FALSE);	close();    } else {	DocLnk f;	//f.setLocation(storagepath);	f.setType("image/jpeg");	f.setName(tr("Photo, %1","date")            .arg(TimeString::localYMD(QDate::currentDate(),TimeString::Short)));	QArray<int> c(1); c[0] = camcat;	f.setCategories(c);	img.save(f.file(),"JPEG",pquality); // Save the image in its original size.	f.writeLink();	pushThumb(f,img);    }    preview();}bool CameraMainWindow::inSnapMode() const{    return !snap_ch.isEmpty();}void CameraMainWindow::setSnapMode(bool y){    if ( y ) {	camera->thumbs->hide();	camera->video->hide();    } else {	camera->thumbs->show();	if ( video_supported )	    camera->video->show();	else	    camera->video->hide();	snap_ch = QString::null;    }}void CameraMainWindow::toggleVideo(){    if ( recording )	stopVideo();    else	startVideo();    recording = !recording;    camera->video->setText(recording ? tr("Stop") : tr("Video"));    camera->photo->setEnabled(!recording);    for (int i=0; i<nthumb; i++)	thumb[i]->setEnabled(!recording && thumb[i]->pixmap());}void CameraMainWindow::startVideo(){    // XXX eg. MJPG}void CameraMainWindow::stopVideo(){}void CameraMainWindow::thumbClicked(int i){    selectThumb(i);}void CameraMainWindow::editThumb(){    picturefile[cur_thumb].execute();}void CameraMainWindow::selectThumb(int i){    cur_thumb = i;    if ( i >= 0 ) {	QImage img( picturefile[i].file() );	camera->videocaptureview->setStill(img);        thumb[i]->setFocus();     } else {	camera->videocaptureview->setLive();    }    a_th_edit->setEnabled(i>=0);    a_th_del->setEnabled(i>=0);    a_th_add->setEnabled(i>=0);    a_send->setEnabled(i>=0);}void CameraMainWindow::moveToContact(){    if ( cur_thumb >= 0 ) {	QCopEnvelope e(Service::channel("Contacts"),"setContactImage(QImage)");	QImage img;	img.load(picturefile[cur_thumb].file());	e << img;    }}void CameraMainWindow::delThumb(){    if ( cur_thumb >= 0 ) {	int d = cur_thumb;	if ( cur_thumb > 0 )	    selectThumb(cur_thumb-1);	delThumb(d);    }}void CameraMainWindow::linkChanged(const QString&){    loadThumbs();}void CameraMainWindow::appMessage(const QCString& msg, const QByteArray& data){    if ( msg == "getImage(QCString,QString,int,int,QImage)" ) {	QDataStream ds(data,IO_ReadOnly);	ds >> snap_ch >> snap_id >> snap_maxw >> snap_maxh;	setSnapMode(TRUE);	QPEApplication::setKeepRunning();    }}void CameraMainWindow::preview(){    if ( camera->videocaptureview->refocusDelay() > 200 ) {	camera->videocaptureview->setCaptureSize( photo_size[psize] );    } else {	camera->videocaptureview->setCaptureSize( camera->videocaptureview->recommendedPreviewSize() );    }}void CameraMainWindow::sendFile(){    if ( cur_thumb >= 0) {	//copy file	QFile input(picturefile[cur_thumb].file());	if(!input.open(IO_ReadOnly)){ 	    return; //error	}	QFile output(picfile);	if(!output.open(IO_WriteOnly)){ 	    return;	}		const int BUFFER_SIZE = 1024;	Q_INT8 buffer[BUFFER_SIZE];	QDataStream srcStr(&input);	QDataStream destStr(&output);	while(!srcStr.atEnd()) {	    int i = 0;	    while(!srcStr.atEnd() && i < BUFFER_SIZE){		srcStr >> buffer[i];		i++;	    }	    for(int k = 0; k < i; k++) {		destStr << buffer[k];	    }	}		QCopEnvelope e(Service::channel("Email"),"writeMessage(QString,QString,QStringList,QStringList)");	e << QString() << QString() << QStringList() << QStringList( QString( picfile ) );    }}void ThumbButton::drawButtonLabel( QPainter *p ){    const QPixmap *pm = pixmap();    if ( pm ) {	QSize s = (size()-pm->size())/2;	p->drawPixmap(s.width(),s.height(),*pm);    }}ThumbButton::ThumbButton( QWidget *parent, const char* name ) : QToolButton(parent,name){}

⌨️ 快捷键说明

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