Autor podstrony: Krzysztof Zajączkowski

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