English Български

How to Use QTableWidget

QTableWidget Overview

Using QTableWidget [qt-project.org] developers can embed tables inside Qt applications. QTableWidget inherits QTableView [qt-project.org]. Items in a QTableWidget instance are provided by class QTableWidgetItem [qt-project.org].

Basic Usage

Set number of rows and columns

  1. m_pTableWidget->setRowCount(10);
  2. m_pTableWidget->setColumnCount(3);

Insert labels into the horizontal header

  1. m_TableHeader<<"#"<<"Name"<<"Text";
  2. m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);

Insert data

The simplest way to insert text into a cell:

  1. m_pTableWidget->setItem(0, 1, new QTableWidgetItem("Hello"));

Hide vertical header aka the line counter

  1. m_pTableWidget->verticalHeader()->setVisible(false);

Hide grid

  1. m_pTableWidget->setShowGrid(false);

Set background of the selected items

  1. m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");

Disable editing

  1. m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

Selection mode and behavior

The behavior of the table for selecting rows and cells can be customized using methods setSelectionBehavior [qt-project.org] and setSelectionMode [qt-project.org]. The following example allows only single selection of a row:

  1. m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  2. m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);

Handling signals

QTableWidget provides appropriate signals for each event such as change of selection, click, double click, etc. [doc.qt.nokia.com] Example of handling double click of a cell:

  1. connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ),  this, SLOT( cellSelected( int, int ) ) );

Example

The following code snippet uses QTableWidget and all described cases above. It has been tested on Symbian^3 device.

  • mainwindow.h

  1. #include <QTableWidget>

  1. private slots:
  2.  
  3.     void cellSelected(int nRow, int nCol);
  4.  
  5. private:
  6.  
  7.     QTableWidget* m_pTableWidget;
  8.  
  9.     QStringList m_TableHeader;

  • mainwindow.cpp

  1. #include "mainwindow.h"
  2.  
  3. #include <QApplication>
  4. #include <QDesktopWidget>
  5. #include <QtCore/QCoreApplication>
  6. #include <QHeaderView>
  7. #include <QMessageBox>
  8.  
  9. MainWindow::MainWindow(QWidget *parent)
  10.     : QMainWindow(parent),
  11.       m_pTableWidget(NULL)
  12. {
  13.     m_pTableWidget = new QTableWidget(this);
  14.     m_pTableWidget->setRowCount(10);
  15.     m_pTableWidget->setColumnCount(3);
  16.     m_TableHeader<<"#"<<"Name"<<"Text";
  17.     m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
  18.     m_pTableWidget->verticalHeader()->setVisible(false);
  19.     m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  20.     m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  21.     m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  22.     m_pTableWidget->setShowGrid(false);
  23.     m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");
  24.     m_pTableWidget->setGeometry(QApplication::desktop()->screenGeometry());
  25.  
  26.     //insert data
  27.     m_pTableWidget->setItem(0, 1, new QTableWidgetItem("Hello"));
  28.  
  29.     connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ),
  30.              this, SLOT( cellSelected( int, int ) ) );
  31. }
  32.  
  33. MainWindow::~MainWindow()
  34. {
  35. }
  36.  
  37. void MainWindow::cellSelected(int nRow, int nCol)
  38. {
  39.     QMessageBox::information(this, "",
  40.                             "Cell at row "+QString::number(nRow)+
  41.                              " column "+QString::number(nCol)+
  42.                              " was double clicked.");
  43. }

See Also

How to use QTableWidget in Qt [developer.nokia.com]
Customizing QTableView [doc.qt.nokia.com]

Categories: