Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions

mainwindow.cpp Example File
widgets/transformations/mainwindow.cpp

    #include <QtGui>

    #include "mainwindow.h"

    MainWindow::MainWindow()
    {
        operations << NoTransformation << NoTransformation << NoTransformation;

        QFrame *frame = new QFrame(this);
        setupFrame(frame);

        QMenu *fileMenu = new QMenu(tr("&File"));
        QAction *quitAction = fileMenu->addAction(tr("E&xit"), this, SLOT(close()));
        quitAction->setShortcut(tr("Ctrl+Q"));
        menuBar()->addMenu(fileMenu);

        setupShapes();

        setCentralWidget(frame);
        setWindowTitle(tr("Transformations"));
    }

    void MainWindow::setupFrame(QFrame *frame)
    {
        QStringList operationStrings;
        operationStrings << tr("No transformation")
                         << tr("Rotate clockwise by 60 degrees")
                         << tr("Scale to 75%")
                         << tr("Translate by (50, 50)");

        QLabel *originalLabel = new QLabel(tr("Original shape"));
        originalLabel->setAlignment(Qt::AlignCenter);
        firstOperation = new QComboBox(frame);
        firstOperation->insertStringList(operationStrings);
        secondOperation = new QComboBox(frame);
        secondOperation->insertStringList(operationStrings);
        thirdOperation = new QComboBox(frame);
        thirdOperation->insertStringList(operationStrings);

        operationsList << NoTransformation << Rotate << Scale << Translate;

        originalPaintWidget = new PaintWidget(frame);
        firstPaintWidget = new PaintWidget(frame);
        secondPaintWidget = new PaintWidget(frame);
        thirdPaintWidget = new PaintWidget(frame);

        connect(firstOperation, SIGNAL(activated(int)),
                this, SLOT(changeOperations(int)));
        connect(secondOperation, SIGNAL(activated(int)),
                this, SLOT(changeOperations(int)));
        connect(thirdOperation, SIGNAL(activated(int)),
                this, SLOT(changeOperations(int)));

        QGridLayout *layout = new QGridLayout(frame);
        layout->addWidget(originalPaintWidget, 0, 0);
        layout->addWidget(firstPaintWidget, 0, 1);
        layout->addWidget(secondPaintWidget, 0, 2);
        layout->addWidget(thirdPaintWidget, 0, 3);
        layout->addWidget(originalLabel, 1, 0);
        layout->addWidget(firstOperation, 1, 1);
        layout->addWidget(secondOperation, 1, 2);
        layout->addWidget(thirdOperation, 1, 3);
    }

    void MainWindow::setupShapes()
    {
        QMenu *shapesMenu = new QMenu(tr("&Shapes"));
        QActionGroup *shapeActions = new QActionGroup(this);
        QAction *clockAction = shapesMenu->addAction(tr("&Clock"));
        shapeActions->addAction(clockAction);
        QAction *houseAction = shapesMenu->addAction(tr("&House"));
        shapeActions->addAction(houseAction);
        QAction *truckAction = shapesMenu->addAction(tr("&Truck"));
        shapeActions->addAction(truckAction);
        menuBar()->addMenu(shapesMenu);

        QPainterPath truck;
        truck.setFillRule(Qt::WindingFill);
        truck.addEllipse(20, 75, 25, 25);
        truck.addEllipse(60, 75, 25, 25);
        truck.moveTo(0, 87);
        truck.lineTo(0, 60);
        truck.lineTo(10, 60);
        truck.lineTo(35, 35);
        truck.lineTo(100, 35);
        truck.lineTo(100, 87);
        truck.lineTo(0, 87);
        truck.moveTo(17, 60);
        truck.lineTo(37, 40);
        truck.lineTo(55, 40);
        truck.lineTo(55, 60);
        truck.lineTo(17, 60);

        QPainterPath clock;
        clock.addEllipse(-50, -50, 100, 100);
        clock.addEllipse(-48, -48, 96, 96);
        clock.moveTo(0, 0);
        clock.lineTo(-2, -2);
        clock.lineTo(0, -42);
        clock.lineTo(2, -2);
        clock.lineTo(0, 0);
        clock.moveTo(0, 0);
        clock.lineTo(2.732, -0.732);
        clock.lineTo(24.495, 14.142);
        clock.lineTo(0.732, 2.732);
        clock.lineTo(0, 0);

        QPainterPath house;
        house.moveTo(-45, -20);
        house.lineTo(  0, -45);
        house.lineTo( 45, -20);
        house.lineTo( 45,  45);
        house.lineTo(-45,  45);
        house.lineTo(-45, -20);
        house.addRect(15, 5, 20, 35);
        house.addRect(-35, -15, 25, 25);

        shapesMap[truckAction] = truck;
        shapesMap[clockAction] = clock;
        shapesMap[houseAction] = house;

        connect(shapesMenu, SIGNAL(triggered(QAction *)),
                this, SLOT(setShape(QAction *)));

        setShape(houseAction);
    }

    void MainWindow::changeOperations(int row)
    {
        Operation operation = operationsList[row];

        if (sender() == firstOperation)
            operations[0] = operation;
        else if (sender() == secondOperation)
            operations[1] = operation;
        else if (sender() == thirdOperation)
            operations[2] = operation;

        QList<Operation> paintOperations;

        paintOperations << operations[0];
        firstPaintWidget->setOperations(paintOperations);

        paintOperations << operations[1];
        secondPaintWidget->setOperations(paintOperations);

        paintOperations << operations[2];
        thirdPaintWidget->setOperations(paintOperations);
    }

    void MainWindow::setShape(QAction *action)
    {
        QPainterPath shape = shapesMap[action];
        action->setChecked(true);
        originalPaintWidget->setShape(shape);
        firstPaintWidget->setShape(shape);
        secondPaintWidget->setShape(shape);
        thirdPaintWidget->setShape(shape);
    }


Copyright © 2004 Trolltech Trademarks
Qt 4.0.0-b1