1
/****************************************************************************
3
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
5
** This file is part of the example classes of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
32
A minimal subclass of QTableView with slots to allow the selection model
39
#include "mainwindow.h"
41
MainWindow::MainWindow()
43
QMenu *fileMenu = new QMenu(tr("&File"), this);
44
QAction *openAction = fileMenu->addAction(tr("&Open"));
45
openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
46
QAction *saveAction = fileMenu->addAction(tr("&Save"));
47
saveAction->setShortcut(QKeySequence(tr("Ctrl+S")));
48
QAction *quitAction = fileMenu->addAction(tr("E&xit"));
49
quitAction->setShortcut(QKeySequence(tr("Ctrl+Q")));
54
connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
55
connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile()));
56
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
58
menuBar()->addMenu(fileMenu);
61
openFile(":/Charts/qtdata.cht");
63
setWindowTitle(tr("Chart"));
67
void MainWindow::setupModel()
69
model = new QStandardItemModel(8, 2, this);
70
model->setHeaderData(0, Qt::Horizontal, tr("Label"));
71
model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));
74
void MainWindow::setupViews()
76
QSplitter *splitter = new QSplitter;
77
QTableView *table = new QTableView;
78
pieChart = new PieView;
79
splitter->addWidget(table);
80
splitter->addWidget(pieChart);
81
splitter->setStretchFactor(0, 0);
82
splitter->setStretchFactor(1, 1);
84
table->setModel(model);
85
pieChart->setModel(model);
87
QItemSelectionModel *selectionModel = new QItemSelectionModel(model);
88
table->setSelectionModel(selectionModel);
89
pieChart->setSelectionModel(selectionModel);
91
setCentralWidget(splitter);
94
void MainWindow::openFile(const QString &path)
98
fileName = QFileDialog::getOpenFileName(this, tr("Choose a data file"),
103
if (!fileName.isEmpty()) {
104
QFile file(fileName);
106
if (file.open(QFile::ReadOnly | QFile::Text)) {
107
QTextStream stream(&file);
110
model->removeRows(0, model->rowCount(QModelIndex()), QModelIndex());
114
line = stream.readLine();
115
if (!line.isEmpty()) {
117
model->insertRows(row, 1, QModelIndex());
119
QStringList pieces = line.split(",", QString::SkipEmptyParts);
120
model->setData(model->index(row, 0, QModelIndex()),
122
model->setData(model->index(row, 1, QModelIndex()),
124
model->setData(model->index(row, 0, QModelIndex()),
125
QColor(pieces.value(2)), Qt::DecorationRole);
128
} while (!line.isEmpty());
131
statusBar()->showMessage(tr("Loaded %1").arg(fileName), 2000);
136
void MainWindow::saveFile()
138
QString fileName = QFileDialog::getSaveFileName(this,
139
tr("Save file as"), "", "*.cht");
141
if (!fileName.isEmpty()) {
142
QFile file(fileName);
143
QTextStream stream(&file);
145
if (file.open(QFile::WriteOnly | QFile::Text)) {
146
for (int row = 0; row < model->rowCount(QModelIndex()); ++row) {
150
pieces.append(model->data(model->index(row, 0, QModelIndex()),
151
Qt::DisplayRole).toString());
152
pieces.append(model->data(model->index(row, 1, QModelIndex()),
153
Qt::DisplayRole).toString());
154
pieces.append(model->data(model->index(row, 0, QModelIndex()),
155
Qt::DecorationRole).toString());
157
stream << pieces.join(",") << "\n";
162
statusBar()->showMessage(tr("Saved %1").arg(fileName), 2000);