Qt kontrolka QTableWidget

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2804 razy

Kontrolka QTableWidget umożliwia wyświetlanie zestawień tabelarycznych danych z możliwością ich ręcznego modyfikowania przez użytkownika, którą można wyłączyć. Przykład zastosowania takiej kontrolki pokazany został na poniższym rysunku.

Qt Creator - przykład wykorzystania kontrolki QTableWidget
Rys. 1
Qt Creator - przykład wykorzystania kontrolki QTableWidget

Kod w pliku nagłówkowym mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT void resizeEvent(QResizeEvent *event) override; public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

Kod w pliku mainwindow.cpp:

#include "mainwindow.h" #include "ui_mainwindow.h" #include "country.h" // plik z klasą zawierającą dane do tabelki MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->tableWidget->setColumnCount(2); // ustawiam liczbę kolumn QStringList headerList; // tworzę listę nagłówków kolumny headerList << "Kraj" << "Stolica"; // dodaję nagłówki ui->tableWidget->setHorizontalHeaderLabels(headerList); // ustawiam nazwy kolumn w nagłówku ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); // ustawiam tryb bez możliwości edytowania pól tabeli // lista obiektów klasy Country zawierających niezbędne dane do wypełnienia tabeli QList<Country> countries = { Country("Polska", "Warszawa"), Country("Czechy", "Praga"), Country("Słowacja", "Bratysława"), Country("Litwa", "Wilno"), Country("Łotwa", "Ryga") }; QBrush brushBackground(Qt::blue); // tworzę brush wypełnienia tła komórek foreach(Country country, countries){ country.setTableWidget(ui->tableWidget, brushBackground, Qt::white); // metoda obiektu klasy Country, która ustawia rekord w kontrolce } ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); // ustawiam zaznaczanie całych wierszy ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); // ustawiam możliwość zaznaczania pojedynczego rekordu } MainWindow::~MainWindow() { delete ui; } void MainWindow::resizeEvent(QResizeEvent *event){ QWidget::resizeEvent(event); QRect size = ui->centralWidget->geometry(); ui->tableWidget->setGeometry(0, 0, size.width(), size.height()); // dostosowuję rozmiar kontrolki do okna gdy jego rozmiar się zmienia }

W pliku nagłówkowym country.h klasy Country kod wygląda następująco:

#ifndef COUNTRY_H #define COUNTRY_H #include <QString> #include <QTableWidget> class Country { QString country; QString capital; public: Country(QString country, QString capital); // metoda dodająca nowy rekord do kontrolki QTableWidget void setTableWidget(QTableWidget *countriesTable, const QBrush &backgroundColor, const QColor &color); }; #endif // COUNTRY_H

W pliku country.cpp:

#include "country.h" Country::Country(QString country, QString capital) : country(country), capital(capital) { } void Country::setTableWidget(QTableWidget *countriesTable, const QBrush &backgroundColor, const QColor &color){ int index = countriesTable->rowCount(); // pobieram liczbę rekordów (wierszy) w tabeli countriesTable->setRowCount(index + 1); // zwiększam ją o 1 QTableWidgetItem *itemCountry = new QTableWidgetItem(country); // tworzę element dla pierszej kolumny itemCountry->setBackground(backgroundColor); // ustawiam mu wypełnienie itemCountry->setTextColor(color); // ustawiam kolor tekstu countriesTable->setItem(index, 0, itemCountry); // dodaję do tabeli QTableWidgetItem *itemCapital = new QTableWidgetItem(capital); // tworzę element dla drugiej kolumny countriesTable->setItem(index, 1, itemCapital); // dodaję go do drugiej kolumny }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qtablewidget.html - opis klasy QTableWidget dostępny na stronie Qt
Propozycje książek