Qt 4.0: mainwindow.cpp Example File (itemviews/chart/mainwindow.cpp)

|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

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

        /****************************************************************************
        **
        ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
        **
        ** This file is part of the documentation of the Qt Toolkit.
        **
        ** This file may be used under the terms of the GNU General Public
    ** License version 2.0 as published by the Free Software Foundation
    ** and appearing in the file LICENSE.GPL included in the packaging of
    ** this file.  Please review the following information to ensure GNU
    ** General Public Licensing requirements will be met:
    ** http://www.trolltech.com/products/qt/opensource.html
    **
    ** If you are unsure which license is appropriate for your use, please
    ** review the following information:
    ** http://www.trolltech.com/products/qt/licensing.html or contact the
    ** sales department at sales@trolltech.com.
        **
        ** 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")));

            setupModel();
            setupViews();

            connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
            connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile()));
            connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));

            menuBar()->addMenu(fileMenu);
            statusBar();

            openFile(":/Charts/qtdata.cht");

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

        void MainWindow::setupModel()
        {
            model = new QStandardItemModel(8, 2, this);
            model->setHeaderData(0, Qt::Horizontal, tr("Label"));
            model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));
        }

        void MainWindow::setupViews()
        {
            QSplitter *splitter = new QSplitter;
            QTableView *table = new QTableView;
            pieChart = new PieView;
            splitter->addWidget(table);
            splitter->addWidget(pieChart);
            splitter->setStretchFactor(0, 0);
            splitter->setStretchFactor(1, 1);

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

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

            setCentralWidget(splitter);
        }

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

            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);
                            model->setData(model->index(row, 0, QModelIndex()),
                                           pieces.value(0));
                            model->setData(model->index(row, 1, QModelIndex()),
                                           pieces.value(1));
                            model->setData(model->index(row, 0, QModelIndex()),
                                           QColor(pieces.value(2)), Qt::DecorationRole);
                            row++;
                        }
                    } while (!line.isEmpty());

                    file.close();
                    statusBar()->showMessage(tr("Loaded %1").arg(fileName), 2000);
                }
            }
        }

        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;

                        pieces.append(model->data(model->index(row, 0, QModelIndex()),
                                                  Qt::DisplayRole).toString());
                        pieces.append(model->data(model->index(row, 1, QModelIndex()),
                                                  Qt::DisplayRole).toString());
                        pieces.append(model->data(model->index(row, 0, QModelIndex()),
                                                  Qt::DecorationRole).toString());

                        stream << pieces.join(",") << "\n";
                    }
                }

                file.close();
                statusBar()->showMessage(tr("Saved %1").arg(fileName), 2000);
            }
        }