Qt - kontrolka QTreeView

Autor podstrony: Krzysztof Zajączkowski

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

Kontrolka QTreeView umożliwia tworzenie drzewiastej listy tak samo jak wcześniej omawiana kontrolka QTreeWidget. Różnica polega na sposobie dodawania i edytowania elementów w kontrolce QTreeView, gdzie aby dodać kolejne elementy konieczne jest utworzenie obiektu klasy QStandardItemModel.

Qt Creator przykład zastosowania kontrolki QTreeView
Rys. 1
Qt Creator przykład zastosowania kontrolki QTreeView

Kod programu w pliku mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel> #include <QStandardItem> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT QStandardItemModel *treeViewModel; // obiekt modelu, który będzie sterował elementami kontrolki QTreeView void resizeEvent(QResizeEvent*) override; // obsługa zdarzenia zmiany rozmiaru okna w celu dostosowania wymiarów kontrolki QTreeView do okna głównego public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

Kod programu w pliku mainwindow.cpp:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // tworzę nowy obiekt klasy QStandardItemModel treeViewModel = new QStandardItemModel(ui->treeView); // ustawiam liczbę kolumn modelu treeViewModel->setColumnCount(2); // ustawiam nazwy kolumn treeViewModel->setHorizontalHeaderLabels( {"Nazwa", "Opis"} ); // tworzę główny element listy QStandardItem *itemEurope = new QStandardItem; // ustawiam jego nazwę itemEurope->setText("Europa"); // tworzę podgałąź QStandardItem *itemZSRE = new QStandardItem; // ustawiam jej tekst itemZSRE->setText("ZSRE"); // dodaję ją do korzenia itemEurope->setChild(0, 0, itemZSRE); // tworzę ikonkę z pliku wrzuconego do zasobów QIcon iconEurope(":/images/open.png"); // podpinam ikonkę itemEurope->setIcon(iconEurope); // tworzę ikonkę z zasobów dla elementu itemZSRE QIcon iconZSRE(":/images/ue.png"); // ustawiam ikonkę itemZSRE->setIcon(iconZSRE); // tworzę element z opisem QStandardItem *itemZSREdescription = new QStandardItem; // ustawiam opis itemZSREdescription->setText("Związek Socjalistycznych Republik Europejskich"); // dodaję element z opisem itemEurope->setChild(0, 1, itemZSREdescription); // dodaję do modelu całą gałąź treeViewModel->setItem(0, 0, itemEurope); // lista krajów do dodania QStringList ZSRE = { "Austria", "Belgia", "Bułgaria", "Chorwacja", "Cypr", "Czechy", "Dania", "Estonia", "Finlandia", "Francja", "Grecja", "Hiszpania", "Holandia", "Irlandia", "Litwa", "Luksemburg", "Łotwa", "Malta", "Niemcy", "Polska", "Portugalia", "Rumunia", "Słowacja", "Słowenia", "Szwecja", "Węgry", "Wielka Brytania", "Włochy" }; // zmienna do tworzenia nowych elemntów QStandardItem *itemCountry; foreach(QString country, ZSRE){ itemCountry = new QStandardItem(country); // tworzę nową gałąź z nazwą z zmiennej country QBrush br(Qt::cyan); // tworzę brush z kolorem cyan jako wypełnienie QBrush brText(Qt::red); // tworzę brush z kolorem czerwonym jako wypełnienie itemCountry->setData(QVariant::fromValue(br), Qt::BackgroundRole); // ustawiam kolor tła itemCountry->setData(QVariant::fromValue(brText), Qt::ForegroundRole); // ustawiam kolor tekstu itemZSRE->setChild(itemZSRE->rowCount(), itemCountry); // dodaję element do gałęzi itemZSRE } // podpinam model pod kontrolkę treeView ui->treeView->setModel(treeViewModel); // ustawiam szerokość pierwszej kolumny ui->treeView->header()->resizeSection(0, 150); } MainWindow::~MainWindow() { delete ui; } void MainWindow::resizeEvent(QResizeEvent* event){ QWidget::resizeEvent(event); QRect size = ui->centralWidget->geometry(); // ustawiam szerokość i wysokość kontrolki treeView tak aby zajmowała obszar kontrolki centralWidget ui->treeView->setGeometry(0, 0, size.width(), size.height()); }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qt.html#ItemDataRole-enum - opis flag możliwych do użycia w metodzie setData obiektu klasy QTreeView dostępny na stronie Qt
  2. doc.qt.io/qt-5/qtreeview.html - opis klasy QTreeView dostępny na stronie Qt
Propozycje książek