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

📄 canvas.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}void Main::init(){    clear();    static int r=24;    qsrand(++r);    mainCount++;    butterflyimg = 0;    logoimg = 0;    int i;    for ( i=0; i < int(canvas.width()) / 56; i++) {	addButterfly();    }    for ( i=0; i < int(canvas.width()) / 85; i++) {	addHexagon();    }    for ( i=0; i < int(canvas.width()) / 128; i++) {	addLogo();    }}Main::~Main(){    delete printer;    if ( !--mainCount ) {	delete[] butterflyimg;	butterflyimg = 0;	delete[] logoimg;	logoimg = 0;    }}void Main::newView(){    // Open a new view... have it delete when closed.    Main *m = new Main(canvas, 0, 0, Qt::WDestructiveClose);    m->show();}void Main::clear(){    editor->clear();}void Main::help(){    static QMessageBox* about = new QMessageBox( "Qt Canvas Example",	    "<h3>The QCanvas classes example</h3>"	    "<ul>"		"<li> Press ALT-S for some sprites."		"<li> Press ALT-C for some circles."		"<li> Press ALT-L for some lines."		"<li> Drag the objects around."		"<li> Read the code!"	    "</ul>", QMessageBox::Information, 1, 0, 0, this, 0, FALSE );    about->setButtonText( 1, "Dismiss" );    about->show();}void Main::aboutQt(){    QMessageBox::aboutQt( this, "Qt Canvas Example" );}void Main::enlarge(){    canvas.setSceneRect(0, 0, canvas.width()*4/3, canvas.height()*4/3);}void Main::shrink(){    canvas.setSceneRect(0, 0, canvas.width()*3/4, canvas.height()*3/4);}void Main::rotateClockwise(){    editor->rotate( 22.5 );}void Main::rotateCounterClockwise(){    editor->rotate( -22.5 );}void Main::zoomIn(){    editor->scale( 2.0, 2.0 );}void Main::zoomOut(){    editor->scale( 0.5, 0.5 );}void Main::mirror(){    editor->scale( -1, 1 );}void Main::moveL(){    editor->translate( -16, 0 );}void Main::moveR(){    editor->translate( +16, 0 );}void Main::moveU(){    editor->translate( 0, -16 );}void Main::moveD(){    editor->translate( 0, +16 );}void Main::print(){    if ( !printer ) printer = new QPrinter;    if ( printer->setup(this) ) {	QPainter pp(printer);        canvas.render(&pp);    }}void Main::addSprite(){    BouncyLogo* i = new BouncyLogo;    canvas.addItem(i);    i->initPos();    i->setZValue(qrand()%256);}QString butterfly_fn;QString logo_fn;void Main::addButterfly(){    if ( butterfly_fn.isEmpty() )	return;    if ( !butterflyimg ) {	butterflyimg = new QImage[4];	butterflyimg[0].load( butterfly_fn );	butterflyimg[1] = butterflyimg[0].smoothScale( int(butterflyimg[0].width()*0.75),		int(butterflyimg[0].height()*0.75) );	butterflyimg[2] = butterflyimg[0].smoothScale( int(butterflyimg[0].width()*0.5),		int(butterflyimg[0].height()*0.5) );	butterflyimg[3] = butterflyimg[0].smoothScale( int(butterflyimg[0].width()*0.25),		int(butterflyimg[0].height()*0.25) );    }    QAbstractGraphicsShapeItem* i = new ImageItem(butterflyimg[qrand()%4]);    canvas.addItem(i);    i->setPos(qrand()%int(canvas.width()-butterflyimg->width()),	    qrand()%int(canvas.height()-butterflyimg->height()));    i->setZValue(qrand()%256+250);}void Main::addLogo(){    if ( logo_fn.isEmpty() )	return;    if ( !logoimg ) {	logoimg = new QImage[4];	logoimg[0].load( logo_fn );	logoimg[1] = logoimg[0].smoothScale( int(logoimg[0].width()*0.75),		int(logoimg[0].height()*0.75) );	logoimg[2] = logoimg[0].smoothScale( int(logoimg[0].width()*0.5),		int(logoimg[0].height()*0.5) );	logoimg[3] = logoimg[0].smoothScale( int(logoimg[0].width()*0.25),		int(logoimg[0].height()*0.25) );    }    QAbstractGraphicsShapeItem* i = new ImageItem(logoimg[qrand()%4]);    canvas.addItem(i);    i->setPos(qrand()%int(canvas.width()-logoimg->width()),	    qrand()%int(canvas.height()-logoimg->width()));    i->setZValue(qrand()%256+256);}void Main::addCircle(){    QAbstractGraphicsShapeItem* i = canvas.addEllipse(QRectF(0,0,50,50));    i->setFlag(QGraphicsItem::ItemIsMovable);    i->setPen(Qt::NoPen);    i->setBrush( QColor(qrand()%32*8,qrand()%32*8,qrand()%32*8) );    i->setPos(qrand()%int(canvas.width()),qrand()%int(canvas.height()));    i->setZValue(qrand()%256);}void Main::addHexagon(){    const int size = int(canvas.width() / 25);    Q3PointArray pa(6);    pa[0] = QPoint(2*size,0);    pa[1] = QPoint(size,-size*173/100);    pa[2] = QPoint(-size,-size*173/100);    pa[3] = QPoint(-2*size,0);    pa[4] = QPoint(-size,size*173/100);    pa[5] = QPoint(size,size*173/100);    QGraphicsPolygonItem* i = canvas.addPolygon(pa);    i->setFlag(QGraphicsItem::ItemIsMovable);    i->setPen(Qt::NoPen);    i->setBrush( QColor(qrand()%32*8,qrand()%32*8,qrand()%32*8) );    i->setPos(qrand()%int(canvas.width()),qrand()%int(canvas.height()));    i->setZValue(qrand()%256);}void Main::addPolygon(){    const int size = int(canvas.width()/2);    Q3PointArray pa(6);    pa[0] = QPoint(0,0);    pa[1] = QPoint(size,size/5);    pa[2] = QPoint(size*4/5,size);    pa[3] = QPoint(size/6,size*5/4);    pa[4] = QPoint(size*3/4,size*3/4);    pa[5] = QPoint(size*3/4,size/4);    QGraphicsPolygonItem* i = canvas.addPolygon(pa);    i->setFlag(QGraphicsItem::ItemIsMovable);    i->setPen(Qt::NoPen);    i->setBrush( QColor(qrand()%32*8,qrand()%32*8,qrand()%32*8) );    i->setPos(qrand()%int(canvas.width()),qrand()%int(canvas.height()));    i->setZValue(qrand()%256);}void Main::addSpline(){    const int size = int(canvas.width()/6);    Q3PointArray pa(12);    pa[0] = QPoint(0,0);    pa[1] = QPoint(size/2,0);    pa[2] = QPoint(size,size/2);    pa[3] = QPoint(size,size);    pa[4] = QPoint(size,size*3/2);    pa[5] = QPoint(size/2,size*2);    pa[6] = QPoint(0,size*2);    pa[7] = QPoint(-size/2,size*2);    pa[8] = QPoint(size/4,size*3/2);    pa[9] = QPoint(0,size);    pa[10]= QPoint(-size/4,size/2);    pa[11]= QPoint(-size/2,0);    QPainterPath path;    path.moveTo(pa[0]);    for (int i = 1; i < pa.size(); i += 3)        path.cubicTo(pa[i], pa[(i + 1) % pa.size()], pa[(i + 2) % pa.size()]);    QGraphicsPathItem* item = canvas.addPath(path);    item->setFlag(QGraphicsItem::ItemIsMovable);    item->setPen(Qt::NoPen);    item->setBrush( QColor(qrand()%32*8,qrand()%32*8,qrand()%32*8) );    item->setPos(qrand()%int(canvas.width()),qrand()%int(canvas.height()));    item->setZValue(qrand()%256);}void Main::addText(){    QGraphicsTextItem* i = canvas.addText("QCanvasText");    i->setFlag(QGraphicsItem::ItemIsMovable);    i->setPos(qrand()%int(canvas.width()),qrand()%int(canvas.height()));    i->setZValue(qrand()%256);}void Main::addLine(){    QGraphicsLineItem* i = canvas.addLine(QLineF( qrand()%int(canvas.width()), qrand()%int(canvas.height()),                                                  qrand()%int(canvas.width()), qrand()%int(canvas.height()) ));    i->setFlag(QGraphicsItem::ItemIsMovable);    i->setPen( QPen(QColor(qrand()%32*8,qrand()%32*8,qrand()%32*8), 6) );    i->setZValue(qrand()%256);}void Main::addMesh(){    int x0 = 0;    int y0 = 0;    if ( !tb ) tb = new QBrush( Qt::red );    if ( !tp ) tp = new QPen( Qt::black );    int nodecount = 0;    int w = int(canvas.width());    int h = int(canvas.height());    const int dist = 30;    int rows = h / dist;    int cols = w / dist;#ifndef QT_NO_PROGRESSDIALOG    Q3ProgressDialog progress( "Creating mesh...", "Abort", rows,			      this, "progress", TRUE );#endif    Q3MemArray<NodeItem*> lastRow(cols);    for ( int j = 0; j < rows; j++ ) {	int n = j%2 ? cols-1 : cols;	NodeItem *prev = 0;	for ( int i = 0; i < n; i++ ) {	    NodeItem *el = new NodeItem;            canvas.addItem(el);	    nodecount++;	    int r = qrand();	    int xrand = r %20;	    int yrand = (r/20) %20;	    el->setPos( xrand + x0 + i*dist + (j%2 ? dist/2 : 0 ),                        yrand + y0 + j*dist );	    if ( j > 0 ) {		if ( i < cols-1 )		    canvas.addItem(new EdgeItem( lastRow[i], el));		if ( j%2 )		    canvas.addItem(new EdgeItem( lastRow[i+1], el));		else if ( i > 0 )		    canvas.addItem(new EdgeItem( lastRow[i-1], el));	    }	    if ( prev ) {		canvas.addItem(new EdgeItem( prev, el));	    }	    if ( i > 0 ) lastRow[i-1] = prev;	    prev = el;	}	lastRow[n-1]=prev;#ifndef QT_NO_PROGRESSDIALOG	progress.setProgress( j );	if ( progress.wasCancelled() )	    break;#endif    }#ifndef QT_NO_PROGRESSDIALOG    progress.setProgress( rows );#endif    // qDebug( "%d nodes, %d edges", nodecount, EdgeItem::count() );}void Main::addRectangle(){    QAbstractGraphicsShapeItem *i = canvas.addRect( QRectF(qrand()%int(canvas.width()),                                                          qrand()%int(canvas.height()),                                                          canvas.width()/5,                                                          canvas.width()/5) );    i->setFlag(QGraphicsItem::ItemIsMovable);    int z = qrand()%256;    i->setBrush( QColor(z,z,z) );    i->setPen( QPen(QColor(qrand()%32*8,qrand()%32*8,qrand()%32*8), 6) );    i->setZValue(z);}

⌨️ 快捷键说明

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