Stronę tą wyświetlono już: 2949 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.
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
}