C++/Qt/QTableWidget

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Calculate the average and sum for QTableWidget

<source lang="cpp"> /****************************************************************************

    • Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    • All rights reserved.
    • Contact: Nokia Corporation (qt-info@nokia.com)
    • This file is part of the documentation of the Qt Toolkit.
    • $QT_BEGIN_LICENSE:LGPL$
    • Commercial Usage
    • Licensees holding valid Qt Commercial licenses may use this file in
    • accordance with the Qt Commercial License Agreement provided with the
    • Software or, alternatively, in accordance with the terms contained in
    • a written agreement between you and Nokia.
    • GNU Lesser General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU Lesser
    • General Public License version 2.1 as published by the Free Software
    • Foundation and appearing in the file LICENSE.LGPL included in the
    • packaging of this file. Please review the following information to
    • ensure the GNU Lesser General Public License version 2.1 requirements
    • will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    • In addition, as a special exception, Nokia gives you certain additional
    • rights. These rights are described in the Nokia Qt LGPL Exception
    • version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    • GNU General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU
    • General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
    • met: http://www.gnu.org/copyleft/gpl.html.
    • If you have questions regarding the use of this file, please contact
    • Nokia at qt-info@nokia.com.
    • $QT_END_LICENSE$
                                                                                                                                                        • /
  1. ifndef WINDOW_H
  2. define WINDOW_H
  3. include <QMainWindow>

class QAction; class QTableWidget; class QTableWidgetItem; class MainWindow : public QMainWindow {

   Q_OBJECT

public:

   MainWindow();

public slots:

   void averageItems();
   void sumItems();

private:

   void setupTableItems();
   QAction *removeAction;
   QTableWidget *tableWidget;

};

  1. endif


  1. include <QtGui>
  2. include "math.h"
  3. 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);
   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(row, column+1)));
   tableWidget->setItem(row, column, newItem);
       }
   }
   for (int column = 0; column < tableWidget->columnCount(); ++column) {
       QTableWidgetItem *newItem = new QTableWidgetItem;
       newItem->setFlags(Qt::ItemIsEnabled);
       tableWidget->setItem(tableWidget->rowCount()-1, column, newItem);
   }

} void MainWindow::averageItems() {

   QList<QTableWidgetItem *> 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<QTableWidgetItem *> 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));

}


  1. include <QtGui>
  2. include "mainwindow.h"

int main(int argc, char *argv[]) {

   QApplication app(argc, argv);
   MainWindow *window = new MainWindow;
   window->show();
   return app.exec();

}


 </source>


Creates a 3x3 table

<source lang="cpp">

  1. include <QtGui>

int main(int argc, char* argv[]) {

 QApplication app(argc, argv);
 QTableWidget tableWidget(3,3);
 for(introw=0;row<tableWidget.rowCount(); row++)
   for (int col=0;col<tableWidget.columnCount(); col++)
     tableWidget.setItem(row,col,new QTableWidgetItem(QString::number(row*col)));
 tableWidget.show();
 return app.exec();

}


 </source>


QTableWidget and QTableWidgetItem

<source lang="cpp"> /****************************************************************************

    • Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    • All rights reserved.
    • Contact: Nokia Corporation (qt-info@nokia.com)
    • This file is part of the documentation of the Qt Toolkit.
    • $QT_BEGIN_LICENSE:LGPL$
    • Commercial Usage
    • Licensees holding valid Qt Commercial licenses may use this file in
    • accordance with the Qt Commercial License Agreement provided with the
    • Software or, alternatively, in accordance with the terms contained in
    • a written agreement between you and Nokia.
    • GNU Lesser General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU Lesser
    • General Public License version 2.1 as published by the Free Software
    • Foundation and appearing in the file LICENSE.LGPL included in the
    • packaging of this file. Please review the following information to
    • ensure the GNU Lesser General Public License version 2.1 requirements
    • will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    • In addition, as a special exception, Nokia gives you certain additional
    • rights. These rights are described in the Nokia Qt LGPL Exception
    • version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    • GNU General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU
    • General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
    • met: http://www.gnu.org/copyleft/gpl.html.
    • If you have questions regarding the use of this file, please contact
    • Nokia at qt-info@nokia.com.
    • $QT_END_LICENSE$
                                                                                                                                                        • /
  1. ifndef WINDOW_H
  2. define WINDOW_H
  3. include <QMainWindow>

class QAction; class QTableWidget; class QTableWidgetItem; class MainWindow : public QMainWindow {

   Q_OBJECT

public:

   MainWindow();

public slots:

   void averageItems();
   void sumItems();

private:

   void setupTableItems();
   QAction *removeAction;
   QTableWidget *tableWidget;

};

  1. endif


  1. include <QtGui>
  2. include "math.h"
  3. 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<QTableWidgetItem *> 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<QTableWidgetItem *> 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));

}


  1. include <QtGui>
  2. include "mainwindow.h"

int main(int argc, char *argv[]) {

   QApplication app(argc, argv);
   MainWindow *window = new MainWindow;
   window->show();
   return app.exec();

}


 </source>


Resize QTableWidget

<source lang="cpp">

/****************************************************************************

    • Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    • All rights reserved.
    • Contact: Nokia Corporation (qt-info@nokia.com)
    • This file is part of the documentation of the Qt Toolkit.
    • $QT_BEGIN_LICENSE:LGPL$
    • Commercial Usage
    • Licensees holding valid Qt Commercial licenses may use this file in
    • accordance with the Qt Commercial License Agreement provided with the
    • Software or, alternatively, in accordance with the terms contained in
    • a written agreement between you and Nokia.
    • GNU Lesser General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU Lesser
    • General Public License version 2.1 as published by the Free Software
    • Foundation and appearing in the file LICENSE.LGPL included in the
    • packaging of this file. Please review the following information to
    • ensure the GNU Lesser General Public License version 2.1 requirements
    • will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    • In addition, as a special exception, Nokia gives you certain additional
    • rights. These rights are described in the Nokia Qt LGPL Exception
    • version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    • GNU General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU
    • General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
    • met: http://www.gnu.org/copyleft/gpl.html.
    • If you have questions regarding the use of this file, please contact
    • Nokia at qt-info@nokia.com.
    • $QT_END_LICENSE$
                                                                                                                                                        • /
  1. ifndef WINDOW_H
  2. define WINDOW_H
  3. include <QMainWindow>

class QAction; class QTableWidget; class QTableWidgetItem; class MainWindow : public QMainWindow {

   Q_OBJECT

public:

   MainWindow();

public slots:

   void changeHeight();
   void changeWidth();

private:

   void setupTableItems();
   QTableWidget *tableWidget;

};

  1. endif


  1. include <QtGui>
  2. include "mainwindow.h"

MainWindow::MainWindow() {

   QMenu *fileMenu = new QMenu(tr("&File"));
   QAction *quitAction = fileMenu->addAction(tr("E&xit"));
   quitAction->setShortcut(tr("Ctrl+Q"));
   QMenu *tableMenu = new QMenu(tr("&Table"));
   QAction *tableWidthAction = tableMenu->addAction(tr("Change Table &Width"));
   QAction *tableHeightAction = tableMenu->addAction(tr("Change Table &Height"));
   menuBar()->addMenu(fileMenu);
   menuBar()->addMenu(tableMenu);
   tableWidget = new QTableWidget(this);
   tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
   connect(quitAction, SIGNAL(triggered()), this, SLOT(close()));
   connect(tableWidthAction, SIGNAL(triggered()), this, SLOT(changeWidth()));
   connect(tableHeightAction, SIGNAL(triggered()), this, SLOT(changeHeight()));
   setupTableItems();
   setCentralWidget(tableWidget);
   setWindowTitle(tr("Table Widget Resizing"));

} void MainWindow::setupTableItems() {

   tableWidget->setRowCount(10);
   tableWidget->setColumnCount(5);
   for (int row = 0; row < tableWidget->rowCount(); ++row) {
       for (int column = 0; column < tableWidget->columnCount(); ++column) {
   QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
       (row+1)*(column+1)));
   tableWidget->setItem(row, column, newItem);
       }
   }

} void MainWindow::changeWidth() {

   bool ok;
   int newWidth = QInputDialog::getInteger(this, tr("Change table width"),
       tr("Input the number of columns required (1-20):"),
       tableWidget->columnCount(), 1, 20, 1, &ok);
   if (ok)
       tableWidget->setColumnCount(newWidth);

} void MainWindow::changeHeight() {

   bool ok;
   int newHeight = QInputDialog::getInteger(this, tr("Change table height"),
       tr("Input the number of rows required (1-20):"),
       tableWidget->rowCount(), 1, 20, 1, &ok);
   if (ok)
       tableWidget->setRowCount(newHeight);

}


  1. include <QtGui>
  2. include "mainwindow.h"

int main(int argc, char *argv[]) {

   QApplication app(argc, argv);
   MainWindow *window = new MainWindow;
   window->show();
   return app.exec();

}


 </source>