Autor podstrony: Krzysztof Zajączkowski

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

Kontrolka QTableView umożliwia wyświetlanie zestawień tabelarycznych danych z możliwością ich ręcznego modyfikowania przez użytkownika, którą można wyłączyć. Kontrolka ta w odróżnieniu od QTableWidget wykorzystuje model do dodawania i formatowania elementów tabeli. Przykład zastosowania takiej kontrolki pokazany został na poniższym rysunku.

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

Kod pliku mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT QStandardItemModel *tableViewModel; // model sterujący dodawaniem elementów do kontrolki QTableView 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" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // tworzę obiekt modelu tableViewModel = new QStandardItemModel(ui->tableView); // podpinam model pod kontrolkę QTableView ui->tableView->setModel(tableViewModel); tableViewModel->setColumnCount(2); // ustaiam liczbę kolumn // ustawiam nagłówki kolumn tableViewModel->setHorizontalHeaderLabels( {"Kraj", "Stolica"} ); ui->tableView->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(tableViewModel, brushBackground, Qt::white); // metoda obiektu klasy Country, która ustawia rekord w kontrolce } ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); // ustawiam zaznaczanie całych wierszy ui->tableView->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->tableView->setGeometry(0, 0, size.width(), size.height()); }

Kod w pliku country.h:

#ifndef COUNTRY_H #define COUNTRY_H #include <QString> #include <QStandardItemModel> class Country { QString country; QString capital; public: Country(QString country, QString capital); void setTableWidget(QStandardItemModel *countriesTableModel, const QBrush &backgroundColor, const QColor &color); }; #endif // COUNTRY_H

Kod w pliku country.cpp:

#include "country.h" Country::Country(QString country, QString capital) : country(country), capital(capital) { } void Country::setTableWidget(QStandardItemModel *countriesTableModel, const QBrush &backgroundColor, const QColor &color){ int index = countriesTableModel->rowCount(); // pobieram liczbę rekordów (wierszy) w modelu tabeli countriesTableModel->setRowCount(index + 1); // zwiększam ją o 1 QStandardItem *itemCountry = new QStandardItem(country); // tworzę element dla pierszej kolumny //itemCountry->setFlags(itemCountry->flags() & ~Qt::ItemIsEditable); itemCountry->setData(QVariant::fromValue(backgroundColor), Qt::BackgroundRole); // ustawiam mu wypełnienie itemCountry->setData(QVariant::fromValue(color), Qt::ForegroundRole); // ustawiam kolor tekstu countriesTableModel->setItem(index, 0, itemCountry); // dodaję do tabeli QStandardItem *itemCapital = new QStandardItem(capital); // tworzę element dla drugiej kolumny countriesTableModel->setItem(index, 1, itemCapital); // dodaję go do drugiej kolumny }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-4.8/qtableview.html - opis klasy QTableView 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.