Qt - kontrolka QTreeWidget

Autor podstrony: Krzysztof Zajączkowski

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

Kontrolka QTreeWidget umożliwia tworzenie drzewiastej listy, gdzie każdy element może zawierać elementy potomne. Typowym przykładem zastosowania takiej kontrolki jest np. wyświetlanie rozwijanej struktury listy folderów w przeglądarkach.

Qt Creator - przykład użycia kontrolki QTeeWidget
Rys. 1
Qt Creator - przykład użycia kontrolki QTreeWidget

Kod w pliku mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDebug> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: // slot podpięty pod sygnał podwójnego kliknięcia elementu w kontrolce treeWidget void on_treeWidget_doubleClicked(const QModelIndex &index); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

Kod w pliku mainwindow.cpp:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->treeWidget->setColumnCount(2); // ustawiam liczbę kolumn (domyślnie jedna) QTreeWidgetItem *itemEurope = new QTreeWidgetItem(ui->treeWidget); // tworzę główny korzeń drzewa itemEurope->setText(0, "Europa"); // ustawiam tekst pierwszej kolumny QIcon iconFolder(":/images/open.png"); // tworzę ikonkę folderu QIcon iconZSRE(":/images/ue.png"); // tworzę ikonkę ZSRE itemEurope->setIcon(0, iconFolder); // ustawiam ikonkę dla głównego korzenia QTreeWidgetItem *itemZSRE = new QTreeWidgetItem(itemEurope); // tworzę gałąź głównego korzenia itemZSRE->setText(0, "ZSRE"); // ustawiam tekst pierwszej kolumny itemZSRE->setText(1, "Związek Socjalistycznych Republik Europejskich"); // ustawiam tekst drugiej kolumny itemZSRE->setIcon(0, iconZSRE); // ustawiam ikonkę itemEurope->addChild(itemZSRE); // dodaję element do korzenia // lista krajów: 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" }; foreach(QString country, ZSRE){ QTreeWidgetItem *countryChild = new QTreeWidgetItem(itemZSRE); // tworzę element kraju countryChild->setText(0, country); // dodaję tekst itemZSRE->addChild(countryChild); // dodaję element potomny do itemZSRE } ui->treeWidget->addTopLevelItem(itemEurope); // dodaję korzeń z elementami potomnymi do kontrolki QTreeWidget ui->treeWidget->setHeaderLabels({"Nazwa", "Opis"}); // ustawiam opis kolumn ui->treeWidget->setColumnWidth(0, 150); // ustawiam rozmiar pierwszej kolumny } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_treeWidget_doubleClicked(const QModelIndex &index) { qDebug() << index.data().toString(); // wypisuję w konsoli Qt Creatora informację o klikniętym elemencie }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5.9/qtreewidget.html - opis klasy QTreeWidget na stronie dokumentacji Qt
Propozycje książek