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

📄 mainwidget.cpp

📁 Linux窗口程序设计__Qt4精彩实例分析上面的源代码第二部分.以循序渐进的方式进行源代码,包括Qt4下面的图形与图画对话框QMainWindow的源代码.
💻 CPP
字号:
#include "mainwidget.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent)
	: QMainWindow(parent)
{
    createActions();
    createMenus();
    
    scene = new QGraphicsScene;
    scene->setSceneRect(-200,-200,400,400);
    
    initScene();
    
    QGraphicsView *view = new QGraphicsView;
    view->setScene(scene);
    view->setMinimumSize(400,400);
    view->show();
    
    setCentralWidget(view);
    resize(550,450);
    setWindowTitle(tr("Graphics Items"));
}

void
MainWindow::createActions()
{
    newAct = new QAction(tr("New"),this);
    newAct->setStatusTip(tr("New"));
    connect(newAct,SIGNAL(triggered()),this,SLOT(slotNew()));
   
    clearAct = new QAction(tr("Clear"),this);
    clearAct->setStatusTip(tr("Clear"));
    connect(clearAct,SIGNAL(triggered()),this,SLOT(slotClear()));
   
    exitAct = new QAction(tr("Exit"),this);
    connect(exitAct,SIGNAL(triggered()),this,SLOT(close()));
    
    addEllipseItemAct = new QAction(tr("Add Ellipse"),this);
    connect(addEllipseItemAct,SIGNAL(triggered()),this,SLOT(slotAddEllipseItem()));
   
    addPolygonItemAct = new QAction(tr("Add Polygon"),this);
    connect(addPolygonItemAct,SIGNAL(triggered()),this,SLOT(slotAddPolygonItem()));
    
    addTextItemAct = new QAction(tr("Add Text"),this);
    connect(addTextItemAct,SIGNAL(triggered()),this,SLOT(slotAddTextItem()));
     
    addFlashItemAct = new QAction(tr("Add Flash"),this);
    connect(addFlashItemAct,SIGNAL(triggered()),this,SLOT(slotAddFlashItem()));
    
    addRectItemAct = new QAction(tr("Add Rectangle"),this);
    connect(addRectItemAct,SIGNAL(triggered()),this,SLOT(slotAddRectItem()));
    
    addAnimItemAct = new QAction(tr("Add Animation"),this);
    connect(addAnimItemAct,SIGNAL(triggered()),this,SLOT(slotAddAnimationItem()));
    
    addAlphaItemAct = new QAction(tr("Add Alpha-png"),this);
    connect(addAlphaItemAct,SIGNAL(triggered()),this,SLOT(slotAddAlphaItem()));
}

void
MainWindow::createMenus()
{
    QMenu * fileMenu = menuBar()->addMenu(tr("File"));
    fileMenu->addAction(newAct);
    fileMenu->addAction(clearAct);
    fileMenu->addSeparator();
    fileMenu->addAction(exitAct);
    
    QMenu * itemsMenu = menuBar()->addMenu(tr("Items"));
    itemsMenu->addAction(addEllipseItemAct);
    itemsMenu->addAction(addRectItemAct);
    itemsMenu->addAction(addPolygonItemAct);
    itemsMenu->addAction(addTextItemAct);
    itemsMenu->addAction(addFlashItemAct);
    itemsMenu->addAction(addAlphaItemAct);
    itemsMenu->addAction(addAnimItemAct);

}

void
MainWindow::initScene()
{
    int i;
    for (i=0; i<3; i++)
        slotAddFlashItem();
    for(i=0;i<3;i++)    
        slotAddEllipseItem();
    for(i=0;i<3;i++)    
        slotAddRectItem();
    for(i=0;i<2;i++)    
        slotAddAlphaItem();
    for(i=0;i<3;i++)    
        slotAddPolygonItem();
    for(i=0;i<3;i++)    
        slotAddTextItem();
}

void
MainWindow::slotNew()
{
    slotClear();
    initScene();
    MainWindow *newWin = new MainWindow;
    newWin->show();
}

void
MainWindow::slotClear()
{
    QList<QGraphicsItem*> listItem = scene->items();

    while (!listItem.empty())
    {
      	scene->removeItem(listItem.at(0));
      	listItem.removeAt(0);
    }
}


//   Add a ellipse item
void
MainWindow::slotAddEllipseItem()
{
    QGraphicsEllipseItem *item = new QGraphicsEllipseItem(QRectF(0,0,80,60));
    item->setPen(Qt::NoPen);
    item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));
    qreal scale = ((qrand()%10)+1)/5.0;
    item->scale(scale,scale);
    item->setFlag(QGraphicsItem::ItemIsMovable);
    scene->addItem(item);
    item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);
}

//   Add a polygon item
void
MainWindow::slotAddPolygonItem()
{
    QVector<QPoint> v;
    v << QPoint(30,-15) << QPoint(0,-30) << QPoint(-30,-15) << QPoint(-30,15) << QPoint(0,30) << QPoint(30,15);
    QGraphicsPolygonItem *item = new QGraphicsPolygonItem(QPolygonF(v));
    item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));
    item->setFlag(QGraphicsItem::ItemIsMovable);
    scene->addItem(item);
    item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);
}

//   Add a rectangle item
void
MainWindow::slotAddRectItem()
{
    QGraphicsRectItem *item = new QGraphicsRectItem(QRectF(0,0,60,60));
    QPen pen;
    pen.setWidth(3);
    pen.setColor(QColor(qrand()%256,qrand()%256,qrand()%256));
    item->setPen(pen);
    item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));
    item->setFlag(QGraphicsItem::ItemIsMovable);
    scene->addItem(item);    
    item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);
}

//   Add a text item
void
MainWindow::slotAddTextItem()
{
    QFont font("Times",16);
    QGraphicsTextItem *item = new QGraphicsTextItem("Hello Qt");
    item->setFont(font);
    item->setFlag(QGraphicsItem::ItemIsMovable);
    item->setDefaultTextColor(QColor(qrand()%256,qrand()%256,qrand()%256));
    scene->addItem(item);
    item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);
}

//   Add a flash item
void
MainWindow::slotAddFlashItem()
{
    FlashItem *item = new FlashItem;
    qreal scale = ((qrand()%10)+1)/5.0;
    item->scale(scale,scale);
    scene->addItem(item);
    item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);
}

//   Add a butterfly item
void
MainWindow::slotAddAlphaItem()
{
    QGraphicsPixmapItem *item = scene->addPixmap(QPixmap(":/images/butterfly"));
    item->setFlag(QGraphicsItem::ItemIsMovable);
    item->setPos((qrand()%int(scene->sceneRect().width()))-200,(qrand()%int(scene->sceneRect().height()))-200);
    
}

void
MainWindow::slotAddAnimationItem()
{
    StarItem *item = new StarItem;
    QGraphicsItemAnimation *anim = new QGraphicsItemAnimation;
    anim->setItem(item);
    QTimeLine *timeLine = new QTimeLine(4000);
    timeLine->setCurveShape(QTimeLine::SineCurve);
    timeLine->setLoopCount(0);
    anim->setTimeLine(timeLine);
    
    int y = (qrand()%400) - 200;
    for (int i=0; i<400; i++)
    {
        anim->setPosAt(i/400.0, QPointF(i-200,y));
    }
    timeLine->start();
    scene->addItem(item);
}



⌨️ 快捷键说明

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