How to Use QTableWidget: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
(Cleanup)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:Developing with Qt::General]]<br />[[Category:HowTo]]<br />[[Category:Snippets]]<br />[[Category:Tutorial]]
{{LangSwitch}}
 
[[Category:Developing with Qt::General]]
[toc align_right=&quot;yes&amp;quot; depth=&quot;3&amp;quot;]
[[Category:HowTo]]
 
[[Category:Snippets]]
'''English''' [[How_to_Use_QTableWidget_Bulgarian|Български]]
[[Category:Tutorial]]
 
__NOTOC__
= How to Use QTableWidget =
Using {{DocLink|QTableWidget}} developers can embed tables inside Qt applications. QTableWidget inherits {{DocLink|QTableView}}. Items in a QTableWidget instance are provided by class {{DocLink|QTableWidgetItem}}.
 
== QTableWidget Overview ==
 
Using &quot;QTableWidget&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qtablewidget.html developers can embed tables inside Qt applications. QTableWidget inherits &quot;QTableView&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qtableview.html. Items in a QTableWidget instance are provided by class &quot;QTableWidgetItem&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qtablewidgetitem.html.


== Basic Usage ==
== Basic Usage ==
Line 15: Line 11:
==== Set number of rows and columns ====
==== Set number of rows and columns ====


<code>m_pTableWidget-&gt;setRowCount(10);<br />m_pTableWidget-&gt;setColumnCount(3);</code>
<code>m_pTableWidget->setRowCount(10);
m_pTableWidget->setColumnCount(3);</code>


==== Insert labels into the horizontal header ====
==== Insert labels into the horizontal header ====


<code>m_TableHeader&amp;lt;&lt;&quot;#&quot;&lt;&lt;&quot;Name&amp;quot;&lt;&lt;&quot;Text&amp;quot;;<br />m_pTableWidget-&gt;setHorizontalHeaderLabels(m_TableHeader);</code>
<code>m_TableHeader<<"#"<<"Name"<<"Text";
m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);</code>


==== Insert data ====
==== Insert data ====


The simplest way to insert text into a cell:<br /><code>m_pTableWidget-&gt;setItem(0, 1, new QTableWidgetItem(&quot;Hello&amp;quot;));<code>
The simplest way to insert text into a cell:
<code>m_pTableWidget->setItem(0, 1, new QTableWidgetItem("Hello"));</code>


==== Hide vertical header aka the line counter ====
==== Hide vertical header aka the line counter ====


</code>m_pTableWidget-&gt;verticalHeader()<s>&gt;setVisible(false);</code>
<code>m_pTableWidget->verticalHeader()->setVisible(false);</code>
<br />h4. Hide grid
 
<br /><code>m_pTableWidget</s>&gt;setShowGrid(false);<code>
==== Hide grid ====
<code>m_pTableWidget->setShowGrid(false);</code>


==== Set background of the selected items ====
==== Set background of the selected items ====


</code>m_pTableWidget-&gt;setStyleSheet(&quot;QTableView {selection-background-color: red;}&quot;);</code>
<code>m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");</code>


==== Disable editing ====
==== Disable editing ====


<code>m_pTableWidget-&gt;setEditTriggers(QAbstractItemView::NoEditTriggers);<code>
<code>m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);</code>


==== Selection mode and behavior ====
==== Selection mode and behavior ====


The behavior of the table for selecting rows and cells can be customized using methods &quot;setSelectionBehavior&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qabstractitemview.html#SelectionBehavior-enum and &quot;setSelectionMode&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qabstractitemview.html#SelectionMode-enum. The following example allows only single selection of a row:
The behavior of the table for selecting rows and cells can be customized using methods [http://doc.qt.io/qt-5/qabstractitemview.html#Public-Functions setSelectionBehavior] and [http://doc.qt.io/qt-5/qabstractitemview.html#Public-Functions setSelectionMode]. The following example allows only single selection of a row:


</code>m_pTableWidget-&gt;setSelectionBehavior(QAbstractItemView::SelectRows);<br />m_pTableWidget-&gt;setSelectionMode(QAbstractItemView::SingleSelection);<code>
<code>m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);</code>


==== Handling signals ====
==== Handling signals ====


QTableWidget provides appropriate &quot;signals for each event such as change of selection, click, double click, etc. &quot;:http://doc.qt.nokia.com/latest/qtablewidget.html#signals Example of handling double click of a cell:
QTableWidget provides appropriate [http://doc.qt.io/qt-5/qtablewidget.html#signals signals for each event such as change of selection, click, double click, etc. ] Example of handling double click of a cell:


</code>connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ), this, SLOT( cellSelected( int, int ) ) );</code>
<code>connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ), this, SLOT( cellSelected( int, int ) ) );</code>


== Example ==
== Example ==
Line 57: Line 58:
* mainwindow.h
* mainwindow.h


<code>#include &lt;QTableWidget&amp;gt;<code>
<code>#include <QTableWidget></code>


</code><br />private slots:
<code>
private slots:


void cellSelected(int nRow, int nCol);
void cellSelected(int nRow, int nCol);
Line 67: Line 69:
QTableWidget* m_pTableWidget;
QTableWidget* m_pTableWidget;


QStringList m_TableHeader;<br /><code>
QStringList m_TableHeader;
</code>


* mainwindow.cpp
* mainwindow.cpp


</code><br />#include &quot;mainwindow.h&amp;quot;
<code>
 
#include "mainwindow.h"
#include &lt;QApplication&amp;gt;<br />#include &lt;QDesktopWidget&amp;gt;<br />#include &lt;QtCore/QCoreApplication&amp;gt;<br />#include &lt;QHeaderView&amp;gt;<br />#include &lt;QMessageBox&amp;gt;


MainWindow::MainWindow(QWidget *parent)<br /> : QMainWindow(parent),<br /> m_pTableWidget(NULL)<br />{<br /> m_pTableWidget = new QTableWidget(this);<br /> m_pTableWidget-&gt;setRowCount(10);<br /> m_pTableWidget-&gt;setColumnCount(3);<br /> m_TableHeader&amp;lt;&lt;&quot;#&quot;&lt;&lt;&quot;Name&amp;quot;&lt;&lt;&quot;Text&amp;quot;;<br /> m_pTableWidget-&gt;setHorizontalHeaderLabels(m_TableHeader);<br /> m_pTableWidget-&gt;verticalHeader()<s>&gt;setVisible(false);<br /> m_pTableWidget</s>&gt;setEditTriggers(QAbstractItemView::NoEditTriggers);<br /> m_pTableWidget-&gt;setSelectionBehavior(QAbstractItemView::SelectRows);<br /> m_pTableWidget-&gt;setSelectionMode(QAbstractItemView::SingleSelection);<br /> m_pTableWidget-&gt;setShowGrid(false);<br /> m_pTableWidget-&gt;setStyleSheet(&quot;QTableView {selection-background-color: red;}&quot;);<br /> m_pTableWidget-&gt;setGeometry(QApplication::desktop()<s>&gt;screenGeometry());
#include <QApplication>
<br /> //insert data<br /> m_pTableWidget</s>&gt;setItem(0, 1, new QTableWidgetItem(&quot;Hello&amp;quot;));
#include <QDesktopWidget>
#include <QCoreApplication>
#include <QHeaderView>
#include <QMessageBox>


connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ),<br /> this, SLOT( cellSelected( int, int ) ) );<br />}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
m_pTableWidget(NULL)
{
m_pTableWidget = new QTableWidget(this);
m_pTableWidget->setRowCount(10);
m_pTableWidget->setColumnCount(3);
m_TableHeader<<"#"<<"Name"<<"Text";
m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
m_pTableWidget->verticalHeader()->setVisible(false);
m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
m_pTableWidget->setShowGrid(false);
m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");
m_pTableWidget->setGeometry(QApplication::desktop()->screenGeometry());


MainWindow::~MainWindow()<br />{<br />}
//insert data
m_pTableWidget->setItem(0, 1, new QTableWidgetItem("Hello"));


void MainWindow::cellSelected(int nRow, int nCol)<br />{<br /> QMessageBox::information(this, &quot;&quot;,<br /> &quot;Cell at row &quot;''QString::number(nRow)''<br /> &quot; column &quot;''QString::number(nCol)''<br /> &quot; was double clicked.&quot;);<br />}<br /><code>
connect( m_pTableWidget, SIGNAL( cellDoubleClicked (int, int) ),
this, SLOT( cellSelected( int, int ) ) );
}


== See Also ==
MainWindow::~MainWindow()
{
}


&quot;How to use QTableWidget in Qt&amp;quot;:http://www.developer.nokia.com/Community/Wiki/index.php?title=How_to_use_QTableWidget_in_Qt
void MainWindow::cellSelected(int nRow, int nCol)
{
QMessageBox::information(this, "",
"Cell at row "''QString::number(nRow)''
" column "''QString::number(nCol)''
" was double clicked.");
}
</code>

Latest revision as of 19:23, 27 June 2015

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

Using QTableWidget developers can embed tables inside Qt applications. QTableWidget inherits QTableView. Items in a QTableWidget instance are provided by class QTableWidgetItem.

Basic Usage

Set number of rows and columns

m_pTableWidget->setRowCount(10);
m_pTableWidget->setColumnCount(3);

Insert labels into the horizontal header

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

Insert data

The simplest way to insert text into a cell:

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

Hide vertical header aka the line counter

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

Hide grid

m_pTableWidget->setShowGrid(false);

Set background of the selected items

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

Disable editing

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 and setSelectionMode. The following example allows only single selection of a row:

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

Handling signals

QTableWidget provides appropriate signals for each event such as change of selection, click, double click, etc. Example of handling double click of a cell:

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
#include <QTableWidget>
private slots:

void cellSelected(int nRow, int nCol);

private:

QTableWidget* m_pTableWidget;

QStringList m_TableHeader;
  • mainwindow.cpp
#include "mainwindow.h"

#include <QApplication>
#include <QDesktopWidget>
#include <QCoreApplication>
#include <QHeaderView>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent)
 : QMainWindow(parent),
 m_pTableWidget(NULL)
{
 m_pTableWidget = new QTableWidget(this);
 m_pTableWidget->setRowCount(10);
 m_pTableWidget->setColumnCount(3);
 m_TableHeader<<"#"<<"Name"<<"Text";
 m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
 m_pTableWidget->verticalHeader()->setVisible(false);
 m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
 m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
 m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
 m_pTableWidget->setShowGrid(false);
 m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");
 m_pTableWidget->setGeometry(QApplication::desktop()->screenGeometry());

 //insert data
 m_pTableWidget->setItem(0, 1, new QTableWidgetItem("Hello"));

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

MainWindow::~MainWindow()
{
}

void MainWindow::cellSelected(int nRow, int nCol)
{
 QMessageBox::information(this, "",
 "Cell at row "''QString::number(nRow)''
 " column "''QString::number(nCol)''
 " was double clicked.");
}