// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses #include #include "math.h" #include "mainwindow.h" MainWindow::MainWindow() { QMenu *fileMenu = new QMenu(tr("&File")); QAction *quitAction = fileMenu->addAction(tr("E&xit")); quitAction->setShortcut(tr("Ctrl+Q")); QMenu *itemsMenu = new QMenu(tr("&Items")); QAction *sumItemsAction = itemsMenu->addAction(tr("&Sum Items")); QAction *averageItemsAction = itemsMenu->addAction(tr("&Average Items")); menuBar()->addMenu(fileMenu); menuBar()->addMenu(itemsMenu); tableWidget = new QTableWidget(12, 3, this); tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); tableWidget->setDragEnabled(true); tableWidget->setAcceptDrops(true); tableWidget->setDropIndicatorShown(true); QTableWidgetItem *valuesHeaderItem = new QTableWidgetItem(tr("Values")); tableWidget->setHorizontalHeaderItem(0, valuesHeaderItem); valuesHeaderItem->setTextAlignment(Qt::AlignVCenter); QTableWidgetItem *squaresHeaderItem = new QTableWidgetItem(tr("Squares")); squaresHeaderItem->setIcon(QIcon(QPixmap(":/Images/squared.png"))); squaresHeaderItem->setTextAlignment(Qt::AlignVCenter); QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes")); cubesHeaderItem->setIcon(QIcon(QPixmap(":/Images/cubed.png"))); cubesHeaderItem->setTextAlignment(Qt::AlignVCenter); tableWidget->setHorizontalHeaderItem(1, squaresHeaderItem); tableWidget->setHorizontalHeaderItem(2, cubesHeaderItem); connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); connect(sumItemsAction, SIGNAL(triggered()), this, SLOT(sumItems())); connect(averageItemsAction, SIGNAL(triggered()), this, SLOT(averageItems())); setupTableItems(); setCentralWidget(tableWidget); setWindowTitle(tr("Table Widget")); } void MainWindow::setupTableItems() { for (int row = 0; row < tableWidget->rowCount()-1; ++row) { for (int column = 0; column < tableWidget->columnCount(); ++column) { QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg( pow((float)row, (float)column+1))); tableWidget->setItem(row, column, newItem); } } for (int column = 0; column < tableWidget->columnCount(); ++column) { QTableWidgetItem *newItem = new QTableWidgetItem; newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); tableWidget->setItem(tableWidget->rowCount()-1, column, newItem); } } void MainWindow::averageItems() { QList selected = tableWidget->selectedItems(); QTableWidgetItem *item; int number = 0; double total = 0; foreach (item, selected) { bool ok; double value = item->text().toDouble(&ok); if (ok && !item->text().isEmpty()) { total += value; number++; } } if (number > 0) tableWidget->currentItem()->setText(QString::number(total/number)); } void MainWindow::sumItems() { QList selected = tableWidget->selectedItems(); QTableWidgetItem *item; int number = 0; double total = 0; foreach (item, selected) { bool ok; double value = item->text().toDouble(&ok); if (ok && !item->text().isEmpty()) { total += value; number++; } } if (number > 0) tableWidget->currentItem()->setText(QString::number(total)); }