Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3111 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
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.