Български English

Как се ползва QTableWidget

Общ преглед на QTableWidget

Чрез QTableWidget [doc.qt.nokia.com] могат да се вграждат таблици в Qt приложения. QTableWidget наследява QTableView [doc.qt.nokia.com]. Елементите в инстанцията на QTableWidget са от клас QTableWidgetItem [doc.qt.nokia.com].

Основна употреба

Задаване на броя на колоните и на редовете

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

Вкарване на наименования на колоните

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

Вкарване на данни

Най-лесният начин да се постави текст в клетка:

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

Скриване на вертикалната номерация на редовете

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

Скриване на решентката

  1. m_pTableWidget->setShowGrid(false);

Задаване на фон на селектирани елементи

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

Забраняване на редакцията

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

Поведение при селектиране

Поведението на таблицата при селектиране на редове и клекти може да бъде променено от програмста чрез методите setSelectionBehavior [doc.qt.nokia.com] и setSelectionMode [doc.qt.nokia.com]. Приложеният пример позволява само единична селекция на цял ред:

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

Управление на сигнали

QTableWidget осигурява подходящи сигнали за всяко събитие като промяна в селекцията, натискане и др. [doc.qt.nokia.com] Пример за прихващане на сигнал от двойно бързо натискане на клетка:

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

Пример

Следният програмен код използва QTableWidget и всички изброени случай на употреба по-горе. Успешно е тестван на Symbian^3 устройство.

  • 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. }

Вижте също

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

Categories: