Home · All Classes · Main Classes · Annotated · Grouped Classes · Functions

mainwindow.cpp Example File
itemviews/chart/mainwindow.cpp

    /****************************************************************************
    **
    ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
    **
    ** This file is part of an example program for Qt.
    ** EDITIONS: NOLIMITS
    **
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    **
    ****************************************************************************/

    /*
      mainwindow.cpp

      A minimal subclass of QTableView with slots to allow the selection model
      to be monitored.
    */

    #include <QtGui>

    #include "pieview.h"
    #include "mainwindow.h"

    MainWindow::MainWindow()
    {
        QMenu *fileMenu = new QMenu(tr("&File"), this);
        QAction *openAction = fileMenu->addAction(tr("&Open"));
        openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
        QAction *saveAction = fileMenu->addAction(tr("&Save"));
        saveAction->setShortcut(QKeySequence(tr("Ctrl+S")));
        QAction *quitAction = fileMenu->addAction(tr("E&xit"));
        quitAction->setShortcut(QKeySequence(tr("Ctrl+Q")));

        QMenu *windowsMenu = new QMenu(tr("&Windows"), this);
        pieWindowAction = windowsMenu->addAction("&Pie Chart");
        pieWindowAction->setCheckable(true);

        setupModel();
        setupViews();

        connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
        connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile()));
        connect(quitAction, SIGNAL(triggered()), this, SLOT(close()));
        connect(windowsMenu, SIGNAL(aboutToShow()), this, SLOT(updateWindowsMenu()));
        connect(pieWindowAction, SIGNAL(checked(bool)),
                pieChart, SLOT(setVisible(bool)));

        menuBar()->addMenu(fileMenu);
        menuBar()->addMenu(windowsMenu);
        statusBar();
        setCentralWidget(table);

        setWindowTitle(tr("Chart"));
        resize(640, 480);
    }

    void MainWindow::setupModel()
    {
        model = new QStandardItemModel(8, 3, this);
    }

    void MainWindow::setupViews()
    {
        table = new QTableView(this);

        pieChart = new PieView;
        pieChart->setWindowTitle(tr("Pie Chart"));

        table->setModel(model);
        pieChart->setModel(model);

        QItemSelectionModel *selectionModel = new QItemSelectionModel(model);
        table->setSelectionModel(selectionModel);
        pieChart->setSelectionModel(selectionModel);
    }

    void MainWindow::openFile()
    {
        QString fileName = QFileDialog::getOpenFileName(this,
            tr("Choose a data file"), "", "*.cht");

        if (!fileName.isEmpty()) {
            QFile file(fileName);

            if (file.open(QFile::ReadOnly | QFile::Text)) {
                QTextStream stream(&file);
                QString line;

                model->removeRows(0, model->rowCount(QModelIndex()), QModelIndex());

                int row = 0;
                do {
                    line = stream.readLine();
                    if (!line.isEmpty()) {

                        model->insertRows(row, 1, QModelIndex());

                        QStringList pieces = line.split(",", QString::SkipEmptyParts);
                        for (int column = 0; column < qMin(3, pieces.count()); ++column) {
                            QModelIndex index = model->index(row, column,
                                QModelIndex());
                            model->setData(index, pieces[column]);
                        }
                        row++;
                    }
                } while (!line.isEmpty());

                file.close();
                if (!pieChart->isExplicitlyHidden())
                    pieChart->raise();
            }
        }
    }

    void MainWindow::saveFile()
    {
        QString fileName = QFileDialog::getSaveFileName(this,
            tr("Save file as"), "", "*.cht");

        if (!fileName.isEmpty()) {
            QFile file(fileName);
            QTextStream stream(&file);

            if (file.open(QFile::WriteOnly | QFile::Text)) {
                for (int row = 0; row < model->rowCount(QModelIndex()); ++row) {

                    QStringList pieces;

                    for (int column = 0; column < 3; ++column) {
                        QModelIndex index = model->index(row, column,
                            QModelIndex());
                        pieces.append(model->data(index,
                            QAbstractItemModel::DisplayRole).toString());
                    }
                    stream << pieces.join(",") << "\n";
                }
            }

            file.close();
        }
    }

    void MainWindow::updateWindowsMenu()
    {
        pieWindowAction->setChecked(!pieChart->isExplicitlyHidden());
    }


Copyright © 2005 Trolltech Trademarks
Qt 4.0.0-b2